Wiki
C++開發環境搭建與測試
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
這一章先不改程式碼,只做一件很具體的事:
在 Linux 上把我準備好的 CMake 模板跑起來。
如果你剛開始學 C++,看到 CMake、Ninja、target_link_libraries 這些名字不用緊張。本章不要求你理解它們的全部原理,先照著步驟把工程跑通。等後面學到標頭檔案、分檔案編寫、第三方庫時,再回來看這些內容會更自然。
完整 CMake 模板詳解放在後面的 CMake工程模板。本章只關心兩件事:
- 你的電腦能不能編譯並執行 C++ 工程。
- VSCode 能不能用 F5 除錯這個工程。
1.本章最終效果
做完本章後,你會得到一個名為 hello_cpp 的資料夾,裡面是完整的 CMake 模板工程。
原樣執行模板時,輸出類似:
[lib1] Vector v = 1 2 3
[lib1] Norm = 3.74166
[lib2] Matrix m =
1 2
3 4
[lib2] Determinant = -2
這一章會按下面的順序來:
- 在 Ubuntu 或 Fedora 上安裝 C++ 開發工具。
- 下載我準備好的 CMake 模板。
- 先原樣執行模板,確認環境沒問題。
- 看一下模板裡哪些檔案和後面的學習有關。
- 用 VSCode 按 F5 除錯模板程式。
先認識幾個名字,後面看到它們就不會太突然:
| 名字 | 先這樣理解 |
|---|---|
g++ |
真正編譯 C++ 程式碼的編譯器 |
CMake |
讀取 CMakeLists.txt,生成構建規則 |
Ninja |
按照 CMake 生成的規則執行編譯 |
GDB |
偵錯程式,VSCode 按 F5 時會用到 |
lib1 / lib2 |
模板裡自帶的兩個示例小庫,本章先不改它們 |
cmake_template |
模板當前生成的可執行程式名 |
注意:hello_cpp 是我們 clone 下來的資料夾名,cmake_template 是這個工程當前生成的程式名。它們不是一回事。
2.安裝基礎工具
2.1.Ubuntu / Debian
sudo apt update
sudo apt install git cmake ninja-build gcc g++ gdb libeigen3-dev
這裡安裝了 libeigen3-dev,是因為模板原始示例裡用到了 Eigen。先裝上它,模板就能直接跑起來。
2.2.Fedora
sudo dnf install git cmake ninja-build gcc gcc-c++ gdb eigen3-devel
| Ubuntu/Debian | Fedora/RHEL | 說明 |
|---|---|---|
| git | git | 版本控制工具 |
| cmake | cmake | CMake 構建工具 |
| ninja-build | ninja-build | Ninja 構建工具 |
| gcc | gcc | C 編譯器 |
| g++ | gcc-c++ | C++ 編譯器 |
| gdb | gdb | GNU 偵錯程式 |
| libeigen3-dev | eigen3-devel | Eigen3 C++ 數值庫開發檔案 |
3.檢查工具是否安裝成功
git --version
cmake --version
ninja --version
g++ --version
gdb --version
這些命令都能輸出版本號,就說明基礎環境已經可用。
4.安裝VScode
https://code.visualstudio.com/Download

如果是debian系下載deb,如果是rhel系下載rpm.
下載完之後,點選瀏覽器,找到這個安裝包的資料夾,並在該路徑開啟終端。

Debian系:輸入sudo apt install ./code然後按tab按鍵補齊檔名,回車。
RHEL系:輸入sudo dnf install ./code然後按tab按鍵補齊檔名,回車。
例如補齊後的:
sudo dnf install ./code-1.102.1-1752598767.el8.x86_64.rpm

5.配置VScode
然後開啟VScode,在終端輸入下面的命令
code

然後可以配置一個環境單獨給C++環境使用,避免和預設環境衝突。

進行一些設定,按我的來就可以

選中你建立的CMake配置

6.安裝 VSCode 擴充套件
建議在 VSCode 裡安裝這些擴充套件:
- CMake Tools
- C/C++
- C/C++ DevTools
- clangd
它們的分工是:
| 擴充套件 | 作用 |
|---|---|
| CMake Tools | 識別 CMakePresets.json,執行 configure/build,選擇 target,管理 CMake 工程構建流程 |
| C/C++ | 微軟官方 C/C++ 擴充套件,提供基礎 IntelliSense、斷點除錯、GDB/LLDB 除錯配置支援 |
| C/C++ DevTools | C/C++ 擴充套件的輔助工具,提供更方便的除錯資訊展示、記憶體/暫存器/變數檢視等增強能力 |
| clangd | 基於 compile_commands.json 提供更準確的程式碼補全、跳轉定義、查詢引用、診斷提示、重構能力 |
簡單說:
CMake Tools負責構建工程;C/C++和C/C++ DevTools主要負責除錯;clangd主要負責程式碼提示、跳轉、診斷和重構。
如果你使用 clangd 做程式碼提示,建議關閉或弱化 C/C++ 擴充套件的 IntelliSense,避免兩個語言伺服器同時工作導致提示重複或衝突。

7.clone CMake 模板
git clone https://github.com/tungchiahui/CMake_Template.git hello_cpp
cd hello_cpp
code .
這裡把專案目錄命名為 hello_cpp。後面所有命令都預設在這個目錄裡執行。
剛開始學習時先不要管 Git 歷史,也不要急著改很多檔案。第一步只做一件事:確認這個模板能在你的電腦上執行。
選中你建立的CMake配置

8.先原樣跑通模板
8.1.用命令列方式執行
先不要急著改程式碼。按ctrl + ~彈出VScode終端並執行下面三行命令:
cmake --preset linux-debug
cmake --build --preset linux-debug
./build/linux-debug/src/cmake_template
如果輸出類似:
[lib1] Vector v = 1 2 3
[lib1] Norm = 3.74166
[lib2] Matrix m =
1 2
3 4
[lib2] Determinant = -2

說明工程、編譯器、CMake、Ninja、Eigen 都工作正常。到這裡,最麻煩的環境部分就已經過關了。
注意:日常開發時可以直接執行 build 目錄裡的程式,不需要每次 install。
只有在驗證安裝佈局時,才需要:
cmake --install build/linux-debug
./install/linux-debug/bin/cmake_template
出現以下,即成功!
[lib1] Vector v = 1 2 3
[lib1] Norm = 3.74166
[lib2] Matrix m =
1 2
3 4
[lib2] Determinant = -2

8.2.用VScode圖形化方式執行
我們要用VScode圖形化方式去執行上面那些命令:
點選左側邊的CMake:
-
首先要配置
cmake --preset linux-debug,等同於在介面中是點選Configure按鈕,並選擇Linux Debug:
-
然後
cmake --build --preset linux-debug這個配置會在你配置configure時被自動配置:
然後你要手動點選左下角的
Build按鈕來進行build:
-
然後
./build/linux-debug/src/cmake_template執行這個程式等同於:先配置程式路徑:

執行程式: Debug是對程式進行debug,而Launch是直接執行程式不debug,除非你有debug需求,一般咱們直接用launch.


除了上面的操作入口,VSCode 底部狀態列中,
Build按鈕旁邊也有Debug和Launch快捷按鈕。選擇好cmake_templatetarget 並完成構建後,可以直接點選這裡執行或除錯程式。
接下來是要講如何把生成產物放進install,一般只有你要發行一個程式之類的才install,平常只用上面的build即可(測試完改回build的配置).
-
cmake --install build/linux-debug等同於: 在 VSCode 裡按Ctrl+Shift+P,然後輸入CMake: Install.
解釋: 這個命令會呼叫當前配置的
build preset對應的cmake --install <buildDir>。 如果你選擇了 linux-debug preset,它等同於cmake --install build/linux-debug. -
然後
./install/linux-debug/bin/cmake_template執行這個程式等同於: 先配置程式路徑:
執行程式的方式和上面一樣,也是點
Debug或者Launch.
9.模板當前結構
現在看一下模板裡和本章有關的檔案。先不用理解每個 CMake 選項,只要知道 src/ 下面放的是程式碼:
.
├── CMakeLists.txt
├── CMakePresets.json
├── .vscode/
│ └── launch.json
├── cmake/
│ └── ProjectOptions.cmake
└── src/
├── CMakeLists.txt
├── main.cpp
├── lib1/
│ ├── CMakeLists.txt
│ ├── inc/lib1/eigen3_test.hpp
│ └── src/eigen3_test.cpp
└── lib2/
├── CMakeLists.txt
├── inc/lib2/eigen3_test.hpp
└── src/eigen3_test.cpp
這裡最重要的是:
| 位置 | 作用 |
|---|---|
src/main.cpp |
程式入口,執行時從這裡開始 |
src/lib1/ |
第一個示例小庫 |
src/lib2/ |
第二個示例小庫 |
CMakeLists.txt |
告訴 CMake 這個工程怎麼構建 |
本章只需要認識這些位置,不需要修改它們。
10.常見問題
10.1.找不到 Ninja
報錯類似:
CMake was unable to find a build program corresponding to "Ninja"
安裝:
sudo apt install ninja-build
或:
sudo dnf install ninja-build
10.2.找不到 gdb
除錯時如果找不到 GDB:
sudo apt install gdb
或:
sudo dnf install gdb
10.3.改了 CMakeLists.txt 後構建異常
本章沒有要求修改 CMakeLists.txt。如果你後面章節改了 CMake 檔案後構建異常,可以重新 configure:
cmake --fresh --preset linux-debug
或者刪除構建目錄:
rm -rf build/linux-debug
cmake --preset linux-debug
11.下一步學什麼
本章只是讓你先擁有一個能執行、能除錯的小工程。
後面的章節會從 C++ 基礎語法開始講:
- C++ 基礎初識
- 資料型別與資料存放
- 輸入輸出
- 運算子
- 程式流程結構
下一章開始,我們先只改 src/main.cpp。等你學到函式分檔案編寫時,再去整理 lib1 / lib2;等你學到工程組織、第三方庫和構建系統時,再回來看 CMake工程模板。