跳到正文

Wiki

C++開發環境搭建與測試

約 5 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

這一章先不改代碼,只做一件很具體的事:

在你的電腦上把我準備好的 CMake 模板跑起來。

本教程使用同一套 C++ 示例,Linux 和 Windows 只是準備工具、選擇構建預設和運行程序的路徑不同。如果你剛開始學 C++,看到 CMake、Ninja、target_link_libraries 這些名字不用緊張,先按照自己系統對應的步驟把工程跑通。

1.先選擇你的系統

你使用的系統 從這裏開始
Ubuntu / Debian、Fedora 等 Linux Linux開發環境搭建與測試
Windows 10 / 11,64 位電腦 Windows開發環境搭建與測試

Linux 使用 GCC;Windows 使用 GCC / MinGW-w64,推薦通過 MSYS2 UCRT64 安裝。Windows 也可以使用已經單獨安裝好的 MinGW-w64、CMake、Ninja 和 Eigen,具體配置放在 Windows 子節裏。

C/C++ 基礎、現代 C++ 和通用 CMake 工程可以使用 Linux 或 Windows 學習。進入後面的 Boost.Asio、串口、TCP/UDP 通信和機械人實踐時,請準備好 Linux 環境,這部分教程統一按 Linux 的操作步驟講解。

這一章只關心兩件事:

  1. 你的電腦能不能編譯並運行 C++ 工程。
  2. VSCode 能不能對這個工程下斷點並進入調試。

完整 CMake 模板詳解放在後面的 CMake工程模板。現在不要求你理解全部構建原理,等學到分文件編寫、庫和工程組織時再回來看。

2.本章最終效果

做完對應系統的子節後,你會得到一個名為 hello_cpp 的文件夾,裏面是完整的 CMake 模板工程。

原樣運行模板時,輸出類似:

[lib1] Vector v = 1 2 3
[lib1] Norm = 3.74166
[lib2] Matrix m =
1 2
3 4
[lib2] Determinant = -2

注意:hello_cpp 是 clone 下來的文件夾名,cmake_template 是工程當前生成的程序名,它們不是一回事。

先認識幾個名字:

名字 先這樣理解
g++ 真正編譯 C++ 代碼的編譯器
CMake 讀取 CMakeLists.txt,生成構建規則
Ninja 按照 CMake 生成的規則執行編譯
GDB 調試器,查看斷點、變量和調用棧時會用到
Eigen 模板原始示例使用的線性代數庫,主要以頭文件形式使用
lib1 / lib2 模板自帶的兩個示例小庫,本章先不改它們

3.後面章節的運行約定

完成環境搭建後,前期練習通常只需要修改:

src/main.cpp

然後在項目根目錄重新構建、運行。根據自己的系統選擇命令。

Linux:

cmake --build --preset linux-debug
./build/linux-debug/src/cmake_template

Windows,PowerShell:

cmake --build --preset windows-debug
./build/windows-debug/bin/cmake_template.exe

也可以直接使用 VSCode CMake Tools 的 Build、Launch 和 Debug 按鈕。兩個系統的操作順序相同,選擇的 preset 分別是 linux-debug、windows-debug。

用途 Linux Windows
Debug 預設 linux-debug windows-debug
Release 預設 linux-release windows-release
Debug 構建目錄 build/linux-debug build/windows-debug
日常運行的程序 build/linux-debug/src/cmake_template build/windows-debug/bin/cmake_template.exe
安裝後的程序 install/linux-debug/bin/cmake_template install/windows-debug/bin/cmake_template.exe

日常練習直接運行 build 目錄中的程序即可,只有驗證安裝和分發時才需要 install。

4.安裝 VSCode 擴展

兩種系統都使用 VSCode。擴展分工如下,具體安裝和配置步驟見對應系統的子節:

擴展 作用
CMake Tools 識別 preset,配置、構建、選擇 target,運行和調試工程
C/C++ 提供 GDB 等調試器的接入,也可以提供 IntelliSense
C/C++ DevTools 按需要使用的輔助擴展
clangd 根據 compile_commands.json 提供代碼補全、跳轉和診斷

如果用 clangd 做代碼分析,可以保留 C/C++ 的調試功能,同時關閉它的 IntelliSense,避免兩套代碼提示重複。clangd 擴展還需要電腦上有 clangd 程序,這部分也在系統子節中説明。

5.下一步學什麼

先完成自己系統的環境搭建,再進入 C++基礎初識。後面的語法、類、STL 和現代 C++ 示例共用同一份講解,遇到系統差異時會在對應位置補充。