⑴ 自用VS Code C++環境配置與CMake最簡指南與模板
初學C++時,項目構建讓我感到困擾
本科時,我最早使用的C++項目構建工具是make,它的基本概念包括目標、命令和依賴,看起來簡單易懂。然而,個人編寫makefile時,感覺就像是在寫腳本。有一次,一個項目停滯了一兩周,我連自己寫的Makefile都看不懂了,於是我轉向了CMake。盡管CMake也很復雜,但無奈它占據了市場,現代的構建工具也只能用它。
(小貼士:在WSL2下,如果docker容器使用C++插件進行智能提示,在WSL2下安裝clangd後,可能會導致容器下的插件不起作用)
在Linux終端中安裝clangd和lldb,然後在VS Code中安裝clangd和CodeLLDB插件。
clangd代碼檢查需要依賴一個compile_command.json文件,這個文件可以使用cmake生成,如果項目使用make構建,也可以使用bear進行生成。接下來將分別介紹這兩種方法。
需要注意的是,盡管clangd名字中有clang,但它同樣支持gcc編譯的項目,甚至是交叉編譯的項目(我曾將clangd用於risc-v,體驗良好)。
CMake生成compile_command.json的方法:在指定構建目錄的命令中加入以下選項,就可以生成compile_command.json(如果對CMake不熟悉,後文將介紹個人使用的最簡CMake項目模板與使用指南)。
使用bear生成compile_command.json的方法:先安裝bear,然後在bear命令後加上你原來准備使用的make命令,就可以在當前目錄下看到compile_command.json。
為clangd指定compile_command.json所在路徑:在VS Code右下角打開Settings,搜索clangd,在Clangd: Arguments指定compile_command.json路徑,由cmake創建的會在構建目錄下,由bear創建的會在當前目錄下。
總之,clangd就開始工作了。
DEBUG配置:在.vscode文件夾下的launch.json文件是VS Code的debug配置文件,只需要在program欄里寫下你的可執行目標文件,然後按F5就可以打斷點開始調試了。
CMake最簡指南與個人用模板:CMake和C++這兩個工具都很強大,但作為項目管理工具,大多數人花太多時間在CMake上並不值得。個人經驗教訓讓我覺得CMake入門只需要懂幾個Modern CMake的基本命令和規則,然後拿一個最簡單的項目模板抄抄改改就可以了,真要看大項目的CMakeLists.txt再去細看,不要像我一樣誤入彎路。
首先安裝cmake,在VS Code上可以安裝一個插件作語法高亮,下面的CMake Tools應該是封裝了CMake的一些操作,想要也可以安裝,但我自己是不用的。
cmake會根據當前目錄下的CMakeLists.txt的內容來執行構建命令。可以查看示例模板的目錄結構,根目錄和子目錄proj下各有一個CMakeLists.txt文件,proj目錄存放著當前的實際項目。這種項目結構的好處是之後還可以在根目錄下添加與proj平級的項目,proj0,proj1,proj2等等,方便拓展。
根目錄下的CMakeLists.txt如下,接下來將按行逐條解釋。
cmake_minimum_required(VERSION3.16):這個命令指示編譯該項目所需的cmake最小版本號,你可以使用cmake --version查看當前的cmake版本號,然後直接照抄就可以了。
set(CMAKE_BUILD_TYPE Debug):這條命令用於設置項目要不要附帶Debug信息進行編譯,設置成Release可以不附帶Debug信息進行編譯。
set(CMAKE_C_COMPILER"/usr/bin/clang"):為CMake設置C編譯器clang,如果沒有安裝clang可以不寫。
set(CMAKE_CXX_COMPILER"/usr/bin/clang++"):為CMake設置C++編譯器clang++,如果沒有安裝clang可以不寫。
set(CMAKE_CXX_STANDARD 11):這個命令很明顯了,設置C++的版本,這里設置為11,可以選擇你喜歡的。
set(CMAKE_CXX_STANDARD_REQUIRED ON):常與上一條命令搭配的命令,讓cmake檢查編譯器是否符合要求。
set(CMAKE_EXPORT_COMPILE_COMMANDS ON):這個命令是指示cmake導出compile_command.json文件,還記得嗎,就是上文說的用於指導clangd進行智能提示的文件,你要是不需要也可以去掉該語句或者設置為OFF。
project(proj LANGUAGES CXX):這是一個必選命令,指定當前項目名,LANGUAGES後指示該項目使用什麼編程語言(注意是復數LANGUAGES而不是LANGUAGE),CXX代表C++。
add_subdirectory(proj):指示proj目錄下還有一個文件夾需要cmake進行處理(注意,這里的proj與上一條project()命令的proj無關系)。
接著看向proj目錄下的CMakeLists.txt,這里很簡單,只有兩條有效命令,還有兩條被注釋了的鏈接命令隨後便講。
file(GLOB_RECURSE srcs CONFIGURE_DEPENDS src/.cc include/.h):file命令是將指定的文件添加到變數中,這里指定了src目錄下的以cc結尾的文件,和include目錄下以.h結尾的文件。(注意,cmake查找相對路徑是當前CMakeLists.txt所在的路徑)GLOB_RECURSE則是指定遞歸地尋找,也就是不僅會搜索src目錄下以cc結尾的文件,src下的任何一級子目錄下的cc文件都會被加入srcs變數,include/*.h也是同理。設置CONFIGURE_DEPENDS則會在目錄下有新文件加入時,更新變數。
add_executable(proj ${srcs}):add_executable這條命令新增了一個名為proj(與之前出現的proj無關)的target,這個target是一個可執行(executable)文件,它的編譯依賴於之前設置的srcs變數。
接下來兩條命令則是展示了如何鏈接庫文件,不需要可以注釋掉,這里使用了Eigen做示範,如果你的電腦還未安裝eigen庫,可以運行sudo apt install libeigen3-dev安裝eigen。
find_package(Eigen3 3.3 REQUIRED NO_MODULE):find_package命令用於載入外部依賴庫,Eigen3 3.3制定了依賴庫名和版本,REQUIRED指明必須找到該庫,否則報錯,NO_MODULE則是讓CMake使用配置模式進行查找,默認情況下,CMake在/usr/lib/cmake搜索依賴庫對應的*Config.cmake文件,用它來配置鏈接庫選項,我在安裝Eigen庫後,它就將cmake的配置文件也安裝到對應目錄里了,因此這里可以使用find_package找到Eigen。
target_link_libraries(proj Eigen3::Eigen):這條命令是非常重要的,它指示了將eigen庫鏈接到了之前設置的target proj上,需要注意的
⑵ vscode 配置 c/c++(markdown)
要充分利用VSCode配置C/C++環境,首先確保已安裝了VSCode、mingw64和相關的C/C++插件。為了保持代碼結構清晰,建議為cpp和c的示例程序分別創建獨立文件夾。
配置過程從創建配置文件開始:通過快捷鍵Ctrl+Shift+P,選擇"C/C++ Configuration (UI)",然後點擊"C_cpp_properties.json",進行文件設置。
接著,按下左上角的調試鍵,選擇"GDB" launch配置,根據項目需求調整相關參數,編輯"launch.json"文件以確保調試環境正確。
最後,為了自動化構建過程,點擊終端面板,選擇"Configure Default Build Task",依據當前代碼內容,調整"tasks.json"的構建參數。這樣,每次修改代碼後,都能自動編譯並檢查。
完成以上步驟後,就可以開始進行C/C++的開發和調試測試了。