第 1 節

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

0瀏覽次數0訪問次數--跳出率--平均停留

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

在 Linux 上把我準備好的 CMake 模板跑起來。

如果你剛開始學 C++,看到 CMakeNinjatarget_link_libraries 這些名字不用緊張。本章不要求你理解它們的全部原理,先照着步驟把工程跑通。等後面學到頭文件、分文件編寫、第三方庫時,再回來看這些內容會更自然。

完整 CMake 模板詳解放在後面的 CMake工程模板。本章只關心兩件事:

  1. 你的電腦能不能編譯並運行 C++ 工程。
  2. VSCode 能不能用 F5 調試這個工程。

本章最終效果

做完本章後,你會得到一個名為 hello_cpp 的文件夾,裏面是完整的 CMake 模板工程。

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

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

這一章會按下面的順序來:

  1. 在 Ubuntu 或 Fedora 上安裝 C++ 開發工具。
  2. 下載我準備好的 CMake 模板。
  3. 先原樣運行模板,確認環境沒問題。
  4. 看一下模板裏哪些文件和後面的學習有關。
  5. 用 VSCode 按 F5 調試模板程序。

先認識幾個名字,後面看到它們就不會太突然:

名字先這樣理解
g++真正編譯 C++ 代碼的編譯器
CMake讀取 CMakeLists.txt,生成構建規則
Ninja按照 CMake 生成的規則執行編譯
GDB調試器,VSCode 按 F5 時會用到
lib1 / lib2模板裏自帶的兩個示例小庫,本章先不改它們
cmake_template模板當前生成的可執行程序名

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

安裝基礎工具

Ubuntu / Debian

sudo apt update
sudo apt install git cmake ninja-build gcc g++ gdb libeigen3-dev

這裏安裝了 libeigen3-dev,是因為模板原始示例裏用到了 Eigen。先裝上它,模板就能直接跑起來。

Fedora

sudo dnf install git cmake ninja-build gcc gcc-c++ gdb eigen3-devel
Ubuntu/DebianFedora/RHEL説明
gitgit版本控制工具
cmakecmakeCMake 構建工具
ninja-buildninja-buildNinja 構建工具
gccgccC 編譯器
g++gcc-c++C++ 編譯器
gdbgdbGNU 調試器
libeigen3-deveigen3-develEigen3 C++ 數值庫開發文件

檢查工具是否安裝成功

git --version
cmake --version
ninja --version
g++ --version
gdb --version

這些命令都能輸出版本號,就説明基礎環境已經可用。

安裝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

配置VScode

然後打開VScode,在終端輸入下面的命令

code

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

alt text

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

alt text

選中你創建的CMake配置

alt text

安裝 VSCode 擴展

建議在 VSCode 裏安裝這些擴展:

  1. CMake Tools
  2. C/C++
  3. C/C++ DevTools
  4. clangd

它們的分工是:

擴展作用
CMake Tools識別 CMakePresets.json,執行 configure/build,選擇 target,管理 CMake 工程構建流程
C/C++微軟官方 C/C++ 擴展,提供基礎 IntelliSense、斷點調試、GDB/LLDB 調試配置支持
C/C++ DevToolsC/C++ 擴展的輔助工具,提供更方便的調試信息展示、內存/寄存器/變量查看等增強能力
clangd基於 compile_commands.json 提供更準確的代碼補全、跳轉定義、查找引用、診斷提示、重構能力

簡單説:

  • CMake Tools 負責構建工程;
  • C/C++C/C++ DevTools 主要負責調試;
  • clangd 主要負責代碼提示、跳轉、診斷和重構。

如果你使用 clangd 做代碼提示,建議關閉或弱化 C/C++ 擴展的 IntelliSense,避免兩個語言服務器同時工作導致提示重複或衝突。

alt text

clone CMake 模板

git clone https://github.com/tungchiahui/CMake_Template.git hello_cpp
cd hello_cpp
code .

這裏把項目目錄命名為 hello_cpp。後面所有命令都默認在這個目錄裏執行。

剛開始學習時先不要管 Git 歷史,也不要急着改很多文件。第一步只做一件事:確認這個模板能在你的電腦上運行。

選中你創建的CMake配置

alt text

先原樣跑通模板

用命令行方式運行

先不要急着改代碼。按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

alt text

説明工程、編譯器、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

alt text

用VScode圖形化方式運行

我們要用VScode圖形化方式去運行上面那些命令:

點擊左側邊的CMake:

  1. 首先要配置cmake --preset linux-debug,等同於在界面中是點擊Configure按鈕,並選擇Linux Debug:
    alt text
  2. 然後cmake --build --preset linux-debug這個配置會在你配置configure時被自動配置:
    alt text
    然後你要手動點擊左下角的Build按鈕來進行build:
    alt text
  3. 然後./build/linux-debug/src/cmake_template運行這個程序等同於:
    先配置程序路徑: alt text
    運行程序: Debug是對程序進行debug,而Launch是直接運行程序不debug,除非你有debug需求,一般咱們直接用launch. alt text
    alt text
    除了上面的操作入口,VSCode 底部狀態欄中,Build 按鈕旁邊也有 DebugLaunch 快捷按鈕。選擇好 cmake_template target 並完成構建後,可以直接點擊這裏運行或調試程序。
    alt text

接下來是要講如何把生成產物放進install,一般只有你要發行一個程序之類的才install,平常只用上面的build即可(測試完改回build的配置).

  1. cmake --install build/linux-debug等同於: 在 VSCode 裏按 Ctrl+Shift+P,然後輸入CMake: Install.
    alt text
    解釋: 這個命令會調用當前配置的 build preset 對應的 cmake --install <buildDir>。 如果你選擇了 linux-debug preset,它等同於cmake --install build/linux-debug.
  2. 然後./install/linux-debug/bin/cmake_template運行這個程序等同於: 先配置程序路徑:
    alt text
    運行程序的方式和上面一樣,也是點Debug或者Launch.

模板當前結構

現在看一下模板裏和本章有關的文件。先不用理解每個 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 這個工程怎麼構建

本章只需要認識這些位置,不需要修改它們。

常見問題

找不到 Ninja

報錯類似:

CMake was unable to find a build program corresponding to "Ninja"

安裝:

sudo apt install ninja-build

或:

sudo dnf install ninja-build

找不到 gdb

調試時如果找不到 GDB:

sudo apt install gdb

或:

sudo dnf install gdb

改了 CMakeLists.txt 後構建異常

本章沒有要求修改 CMakeLists.txt。如果你後面章節改了 CMake 文件後構建異常,可以重新 configure:

cmake --fresh --preset linux-debug

或者刪除構建目錄:

rm -rf build/linux-debug
cmake --preset linux-debug

下一步學什麼

本章只是讓你先擁有一個能運行、能調試的小工程。

後面的章節會從 C++ 基礎語法開始講:

  1. C++ 基礎初識
  2. 數據類型與數據存放
  3. 輸入輸出
  4. 運算符
  5. 程序流程結構

下一章開始,我們先只改 src/main.cpp。等你學到函數分文件編寫時,再去整理 lib1 / lib2;等你學到工程組織、第三方庫和構建系統時,再回來看 CMake工程模板

音乐页