尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ubuntu 22.04/24.04 C/C++开发环境搭建:从GCC到VS Code全流程指南

Ubuntu 22.04/24.04 C/C++开发环境搭建:从GCC到VS Code全流程指南 1. 项目概述为什么要在Ubuntu上搭建C/C环境如果你刚从Windows或macOS转向Linux或者正准备投身嵌入式、机器人比如PX4、高性能计算等领域第一个拦路虎往往就是开发环境的搭建。网上教程很多但要么过于零散要么版本过时照着做总差那么几步。今天我就以最新的Ubuntu 22.04 LTS或24.04 LTS为例带你从头到尾、明明白白地搭建一个完整、高效、可复现的C/C开发环境。这不仅仅是安装几个软件更是理解Linux下开发生态的第一步。为什么选择Ubuntu因为它拥有最庞大的社区和最丰富的软件源遇到问题几乎都能找到解决方案。而C/C作为系统级、性能至上的语言在Linux上有着天然的亲和力无论是驱动开发、算法实现比如你搜的“c语言c算法”还是像STM32、RV1106这类嵌入式交叉编译Linux都是主力平台。我们将使用最主流、最稳定的工具链包括GCC编译器、GDB调试器、CMake构建工具并集成强大的VS Code编辑器最终形成一个能应对日常开发、项目构建和问题调试的“标准作战平台”。2. 核心工具链选型与安装前准备在动手之前我们先理清需要哪些核心组件。一个现代的C/C开发环境远不止一个编译器那么简单。2.1 核心组件解析编译器、构建工具与调试器GCC (GNU Compiler Collection)这是Linux世界C/C编译器的绝对标准。它包含了gccC编译器、gC编译器以及其他语言前端。我们选择它是因为其稳定性、标准兼容性以及对各类硬件架构x86, ARM等的广泛支持。GDB (GNU Debugger)强大的源代码级调试器。没有调试器的开发就像蒙眼走路GDB允许你设置断点、查看变量、分析内存是定位复杂Bug的利器。CMake跨平台的自动化构建系统生成器。它不直接构建项目而是根据一个名为CMakeLists.txt的配置文件生成你熟悉的Makefile、Ninja文件甚至Visual Studio或Xcode项目。使用CMake是现代C/C项目的标配它能极大地管理多目录、多库的复杂项目。Clang/LLVM可选但推荐另一个优秀的编译器前端套件。Clang通常提供更清晰、更快速的错误和警告信息。许多开发者喜欢同时安装GCC和Clang用于对比验证。LLVM还包含像clang-format代码格式化、clang-tidy静态分析等提升代码质量的工具。构建工具make是执行Makefile的基础工具ninja是一个更专注于速度的小型构建系统常作为CMake的后端。2.2 系统准备与最佳实践在开始安装前请确保你的Ubuntu系统是最新的。打开终端快捷键CtrlAltT执行以下命令sudo apt update sudo apt upgrade -y注意sudo apt update是刷新本地软件包索引获取服务器上最新的软件列表。sudo apt upgrade -y则是实际升级所有可升级的软件包。-y参数表示自动确认避免中途询问。这是一个好习惯能确保我们从干净的起点开始避免因旧版本导致的依赖冲突。如果你的系统是新安装的可能还需要安装一些基础工具如curl,wget,git等它们在后期的源码下载或工具安装中会用到sudo apt install -y curl wget git build-essential其中build-essential是一个元软件包它会自动安装gcc,g,make等编译所需的核心工具。但为了更清晰地控制版本和组件我们接下来会进行更精细化的安装。3. 分步安装与配置核心开发工具我们将采用“基础编译环境 - 高级工具 - 编辑器集成”的路径确保每一步都稳固。3.1 安装GCC、G与GDB虽然build-essential包含了它们但我们显式安装以便管理sudo apt install -y gcc g gdb安装完成后验证版本gcc --version g --version gdb --version你应该能看到类似gcc (Ubuntu 11.4.0)这样的输出。Ubuntu 22.04 LTS默认是GCC 1124.04 LTS可能是GCC 13或14。对于大多数开发系统默认版本已足够。如果你需要特定版本例如为了兼容性可以使用sudo apt install gcc-11 g-11来安装并通过update-alternatives命令管理多版本。3.2 安装CMake与NinjaUbuntu仓库中的CMake版本可能较旧。对于较新的项目我们通常需要更高版本。推荐通过Kitware官方APT仓库安装最新稳定版。首先卸载旧版本如果有并安装依赖sudo apt remove --purge -y cmake sudo apt install -y software-properties-common lsb-release ca-certificates然后添加Kitware的官方仓库并安装wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2/dev/null | sudo apt-key add - sudo apt-add-repository deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main sudo apt update sudo apt install -y cmake cmake-curses-gui cmake-qt-gui实操心得cmake-curses-gui提供了ccmake这个终端图形化配置工具在服务器或无GUI环境下非常有用。cmake-qt-gui则是图形化的CMake配置工具。即使你主要用命令行也建议安装以备不时之需。验证安装cmake --version接下来安装Ninjasudo apt install -y ninja-build3.3 安装Clang/LLVM工具链Clang工具链能提供更好的诊断信息。同样我们安装较新的版本以LLVM 16为例你可以根据需要选择其他版本wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo add-apt-repository deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-16 main sudo apt update sudo apt install -y clang-16 clangd-16 clang-format-16 clang-tidy-16 lldb-16 llvm-16-dev lld-16安装后你可以创建符号链接或使用update-alternatives来设置默认版本。一个简单的方法是直接调用带版本号的命令如clang-16。3.4 安装常用开发库C/C开发离不开各种库。根据你的领域可能需要安装不同的开发包。这里列出一些通用和常见的# 基础开发库头文件和链接库 sudo apt install -y libc6-dev libstdc-12-dev # 常用工具库 sudo apt install -y pkg-config # 帮助查找库文件 sudo apt install -y libssl-dev # OpenSSL加密库 sudo apt install -y zlib1g-dev libbz2-dev liblzma-dev # 压缩库 sudo apt install -y libncurses5-dev libreadline-dev # 终端交互库 # 图形与多媒体如果需要 sudo apt install -y libgl1-mesa-dev libglu1-mesa-dev # OpenGL sudo apt install -y libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev # SDL2 # 网络与并发 sudo apt install -y libboost-all-dev # Boost库谨慎体积大 sudo apt install -y libcurl4-openssl-dev # libcurl注意事项libboost-all-dev会安装完整的Boost库体积非常大几个GB。如果你只需要其中部分组件请使用如libboost-system-dev、libboost-filesystem-dev这样的具体包名。使用apt search libboost-来查找。4. 集成开发环境IDE配置VS Code深度定制命令行工具是基础但一个强大的IDE能极大提升效率。VS Code以其轻量、插件化和强大的C/C支持成为首选。4.1 安装VS Code从微软官方仓库安装是最佳方式可以自动接收更新wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor packages.microsoft.gpg sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg sudo sh -c echo deb [archamd64,arm64,armhf signed-by/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main /etc/apt/sources.list.d/vscode.list rm -f packages.microsoft.gpg sudo apt update sudo apt install -y code安装后可以在应用菜单中找到VS Code或者直接在终端输入code启动。4.2 配置C/C核心插件与智能感知启动VS Code进入扩展市场CtrlShiftX搜索并安装以下核心插件C/C (ms-vscode.cpptools)微软官方插件提供IntelliSense代码补全、提示、调试、浏览等功能。这是核心中的核心。CMake Tools (ms-vscode.cmake-tools)如果你使用CMake这个插件必不可少。它能帮你配置、构建、测试和调试CMake项目。Code Runner (formulahendry.code-runner)一键运行多种语言的代码片段非常方便快速测试。安装完C/C插件后我们需要配置IntelliSense引擎以提供准确的代码补全和错误检查。VS Code的IntelliSense依赖于一个名为“编译数据库”的东西它记录了编译每个文件时使用的确切编译器和参数。对于CMake项目CMake Tools插件会自动生成它。对于非CMake项目我们需要手动配置。在项目根目录下创建一个.vscode文件夹并在其中创建两个文件c_cpp_properties.json和tasks.json。1. 配置c_cpp_properties.json 这个文件告诉C/C插件如何解析你的代码。按CtrlShiftP输入“C/C: Edit Configurations (UI)”通过UI界面配置更直观。主要设置编译器路径比如/usr/bin/gcc或/usr/bin/clang-16。IntelliSense 模式选择linux-gcc-x64如果用GCC或linux-clang-x64如果用Clang。包含路径添加你的项目头文件路径以及系统库路径如/usr/include/usr/local/include。对于标准库插件通常能自动检测。一个手动编写的示例c_cpp_properties.json可能如下{ configurations: [ { name: Linux, includePath: [ ${workspaceFolder}/**, /usr/include, /usr/local/include ], defines: [], compilerPath: /usr/bin/gcc, cStandard: c17, cppStandard: c17, intelliSenseMode: linux-gcc-x64, configurationProvider: ms-vscode.cmake-tools } ], version: 4 }注意configurationProvider: ms-vscode.cmake-tools这一行它告诉C/C插件从CMake Tools插件获取配置信息这对于CMake项目是首选方式。2. 配置tasks.json(用于构建) 这个文件定义构建任务。按CtrlShiftP输入“Tasks: Configure Task”然后选择“Create tasks.json file from template”再选择“Others”。这会创建一个模板。我们修改它来运行make或直接调用编译器。一个简单的使用g编译单个文件的任务配置{ version: 2.0.0, tasks: [ { label: build with g, type: shell, command: g, args: [ -g, -stdc17, -Wall, -Wextra, -o, ${fileDirname}/${fileBasenameNoExtension}, ${file} ], group: { kind: build, isDefault: true }, problemMatcher: [$gcc] } ] }这样按CtrlShiftB就可以编译当前打开的C文件了。4.3 配置CMake项目工作流对于CMake项目CMake Tools插件让一切变得简单。打开一个包含CMakeLists.txt的文件夹。底部状态栏会出现一系列CMake工具按钮通常显示“No Kit Selected”。点击“No Kit Selected”或按CtrlShiftP输入“CMake: Select a Kit”选择你的编译器套件如“GCC 11.4.0 x86_64-linux-gnu”或“Clang 16.0.0”。接着点击状态栏的“Build”按钮或输入“CMake: Build”即可构建项目。插件会自动生成build目录并在其中生成编译数据库C/C插件据此提供完美的IntelliSense。踩坑记录有时IntelliSense会报错找不到头文件即使CMake配置正确。这通常是因为编译数据库没有及时更新。尝试以下步骤执行“CMake: Delete Cache and Reconfigure”。重启VS Code。检查.vscode/c_cpp_properties.json中是否引用了ms-vscode.cmake-tools作为配置提供者。4.4 配置调试环境VS Code的调试功能非常强大。对于使用GCC编译并带有-g调试符号的程序配置调试很简单。在.vscode文件夹下创建launch.json文件。按CtrlShiftP输入“Debug: Add configuration”选择“C (GDB/LLDB)”。一个基础的配置如下{ version: 0.2.0, configurations: [ { name: (gdb) Launch, type: cppdbg, request: launch, program: ${workspaceFolder}/build/你的可执行文件名, // 修改为你的程序路径 args: [], stopAtEntry: false, cwd: ${workspaceFolder}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: Enable pretty-printing for gdb, text: -enable-pretty-printing, ignoreFailures: true } ], preLaunchTask: build with g // 这里对应tasks.json中的label实现启动前自动构建 } ] }配置好后按F5即可启动调试左侧会出现变量查看、调用堆栈等面板可以设置断点、单步执行体验不输于大型IDE。5. 实战从零创建一个CMake项目并调试理论说再多不如动手一试。我们来创建一个经典的“Hello World”项目并体验完整的编辑、构建、调试流程。5.1 创建项目结构打开终端创建项目目录并进入mkdir my_cmake_project cd my_cmake_project创建源代码文件src/main.cppmkdir src cat src/main.cpp EOF #include iostream #include vector #include string int main() { std::vectorstd::string msg {Hello, C, World, from, VS Code, and the C extension!}; for (const std::string word : msg) { std::cout word ; } std::cout std::endl; // 故意设置一个调试点 int sum 0; for (int i 1; i 10; i) { sum i; // 在这里设置断点 } std::cout Sum from 1 to 10 is: sum std::endl; return 0; } EOF创建CMakeLists.txtcat CMakeLists.txt EOF cmake_minimum_required(VERSION 3.10) project(MyCMakeProject VERSION 1.0.0 LANGUAGES CXX) # 设置C标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 添加可执行文件 add_executable(${PROJECT_NAME} src/main.cpp) # 设置输出目录可选 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # 如果有需要链接的库使用 target_link_libraries # target_link_libraries(${PROJECT_NAME} PRIVATE some_library) EOF5.2 使用VS Code打开并配置在终端中用VS Code打开当前目录code .VS Code打开后底部状态栏会提示“CMake项目未配置”。点击它或者按CtrlShiftP输入“CMake: Configure”选择之前配置好的Kit比如GCC。CMake配置成功后状态栏会显示构建目标MyCMakeProject和构建类型Debug。点击状态栏的“Build”按钮一个小齿轮开始构建。构建输出会在终端面板显示。5.3 运行与调试构建成功后你可以在终端中运行程序./build/bin/MyCMakeProject但更强大的是使用调试功能。打开src/main.cpp文件在第14行sum i;的左侧点击设置一个断点会出现红点。按F5启动调试。VS Code会自动切换到调试视图程序会在断点处暂停。此时你可以查看变量在左侧“变量”窗口看到i和sum的当前值。逐步执行使用顶部的调试控制栏或F10单步跳过F11单步进入。调用堆栈查看函数调用链。调试控制台可以输入GDB命令进行更底层的控制。这就是一个完整的、现代化的C/C开发工作流。6. 进阶配置与效率工具基础环境搭好后一些“利器”能让你事半功倍。6.1 代码格式化与静态分析保持代码风格一致至关重要。我们可以配置clang-format和clang-tidy。Clang-Format在项目根目录创建.clang-format文件定义代码风格如基于Google、LLVM风格或自定义。然后在VS Code中安装“Clang-Format”插件并设置保存时自动格式化。# 生成一个默认的LLVM风格配置文件 clang-format-16 -stylellvm -dump-config .clang-format在VS Code设置中Ctrl,搜索“Format On Save”勾选。并确保C/C插件的格式化程序是clang-format。Clang-Tidy用于静态代码分析检查潜在错误、编码规范等。在CMakeLists.txt中启用# 在add_executable之后 set(CMAKE_CXX_CLANG_TIDY clang-tidy-16;-checks*;)这样每次构建时都会运行clang-tidy检查。你也可以在VS Code中安装“Clang-Tidy”插件在编辑时实时查看警告。6.2 版本控制集成VS Code对Git有出色的内置支持。确保你的项目已初始化Git仓库git init源代码管理面板会显示所有更改。建议配置.gitignore文件忽略build/目录、.vscode/中的部分文件如settings.json可能包含个人偏好等。一个基础的C项目.gitignore示例# 构建目录 build/ */build/ # IDE .vscode/ !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json # 编译产物 *.o *.so *.a *.exe *.out6.3 处理中文乱码问题如果你在代码或输出中遇到中文乱码这在处理文件路径或打印中文时常见通常是编码问题。源代码文件编码确保你的.cpp和.h文件以UTF-8编码保存。在VS Code右下角状态栏可以查看和更改编码。终端编码Ubuntu终端默认使用UTF-8一般没问题。如果输出乱码可以检查环境变量echo $LANG # 应该是类似 zh_CN.UTF-8 或 en_US.UTF-8如果不是可以在~/.bashrc或~/.zshrc中添加export LANGen_US.UTF-8或export LANGzh_CN.UTF-8并重启终端。编译器警告GCC/Clang在编译含有非ASCII字符的源文件时如果没有指定编码可能会警告。可以在编译命令或CMake中指定add_compile_options(-finput-charsetUTF-8 -fexec-charsetUTF-8)7. 常见问题与排查技巧实录即使按照步骤操作也难免会遇到问题。这里记录一些高频问题和解决方法。7.1 软件包安装失败或版本冲突问题sudo apt install时出现“无法定位软件包”或“依赖关系不满足”。排查更新软件源首先确保执行了sudo apt update。检查拼写包名严格区分大小写且必须完全正确。使用apt search 关键词来查找准确的包名。PPA源问题如果你添加了第三方PPA如LLVM、Kitware可能因为Ubuntu版本代号不匹配而失败。检查add-apt-repository命令中的$(lsb_release -cs)是否输出了正确的版本代号如jammy对应22.04。依赖冲突有时安装新版本会与旧版本冲突。尝试先卸载旧版本或者使用aptitude工具进行更智能的依赖解决sudo apt install aptitude sudo aptitude install 包名。7.2 VS Code IntelliSense不工作或报错问题代码没有自动补全或者头文件下有红色波浪线提示“无法打开源文件”。排查重新扫描按CtrlShiftP运行“C/C: 重新扫描工作空间”。检查配置提供者确保c_cpp_properties.json中configurationProvider设置为ms-vscode.cmake-tools对于CMake项目或者includePath和compilerPath设置正确。清除缓存删除项目下的.vscode/ipch文件夹IntelliSense持久化缓存然后重启VS Code。查看日志打开C/C插件的输出日志CtrlShiftP- “C/C: 打开日志”里面通常有详细的错误信息。7.3 CMake配置失败问题CMake配置时提示找不到编译器、找不到包如find_package失败。排查编译器路径确保你选择的Kit中的编译器路径是有效的。可以在终端中用which gcc或which clang确认。开发包未安装find_package寻找的是开发包-dev后缀。例如寻找OpenCV需要安装libopencv-dev而不仅仅是opencv。指定CMake模块路径如果库安装在非标准路径如/usr/local可能需要告诉CMake去哪里找。在CMakeLists.txt中或配置时添加set(CMAKE_PREFIX_PATH /usr/local/lib/cmake/SomeLibrary;$ENV{CMAKE_PREFIX_PATH})查看CMake缓存在build/目录下有一个CMakeCache.txt文件里面记录了所有配置变量是排查问题的宝贵资料。7.4 调试器无法启动或断点不生效问题按F5后调试器一闪而过或者断点处没有暂停断点显示为灰色空心圆。排查程序路径检查launch.json中的program路径是否正确指向了编译出的可执行文件。对于CMake项目路径通常是${workspaceFolder}/build/bin/你的程序名。调试符号确保编译时添加了-g选项。在CMake中Debug构建类型会自动添加。检查你的构建类型是否为Debug。预启动任务如果launch.json中配置了preLaunchTask确保对应的tasks.json中的任务能成功构建出最新的可执行文件。GDB权限有时调试需要特殊权限。可以尝试在launch.json的setupCommands中添加{ text: set disable-randomization off, ignoreFailures: true }检查程序输出在调试控制台查看是否有错误输出。有时程序在启动初期就崩溃了。7.5 多版本编译器管理问题系统中有多个GCC或Clang版本如何切换解决方案使用update-alternatives工具。# 以gcc为例注册不同版本 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 120 # 交互式选择默认版本 sudo update-alternatives --config gcc # 对g、gfortran等做同样操作对于Clang方法类似。更简单的方式是在CMake或编译命令中直接指定编译器绝对路径如CC/usr/bin/gcc-11 CXX/usr/bin/g-11 cmake ..。环境搭建本身就是一个学习和排错的过程。每次遇到问题并解决你对这套工具链的理解就会加深一层。记住一个稳定、顺手的环境是高效开发的基石花时间把它打磨好绝对物超所值。
返回列表