前言
我上一篇文章VS Code C++ 安裝和環(huán)境配置(MSVC和MinGW)介紹了通過tasks.json
和launch.json
共存cl
和g++
的編譯方式,這種直接使用編譯命令的方法比較偏向于小項(xiàng)目以及復(fù)習(xí)編譯工具基礎(chǔ),對(duì)于多源文件和編譯選項(xiàng)很復(fù)雜的工程, 會(huì)使用編譯器自帶的批處理Make程序比如GNU的make
, MSVC的nmake
和第三方的ninja
, 以及方便的CMake
來幫助最終多任務(wù)的編譯和生成. 今天介紹怎么在VS Code中使用CMake
插件來構(gòu)建C++工程.
為什么使用CMake
基于Make的構(gòu)建程序一般都是通過讀取相應(yīng)Makefile文件(不同builder名稱會(huì)有不同,功能一致)中的規(guī)則來生成最終的目標(biāo)文件或者二進(jìn)制文件,但是Makefile文件并不好寫,對(duì)于c++這種編譯型語言,跨平臺(tái)也很麻煩,所以出現(xiàn)了CMake
這種工具來幫助程序員生成Makefile文件來使用.
準(zhǔn)備工作
- 在VS Code中按
Ctrl+Shift+X
打開EXTENSIONS
搜索安裝如下插件:
CMake //語法提示,用來編輯CMakeList.txt文檔
CMake Tools //CMake功能插件
-
檢查一下左下角的狀態(tài)欄是否如下圖的可點(diǎn)擊按鈕:CMake狀態(tài)欄按鈕
開始構(gòu)建
- 寫一個(gè)簡(jiǎn)單的
main.cpp
:
#include <iostream>
int main(int, char**) {
std::cout << "Hello, world!\n";
system("pause");
}
-
生成一個(gè)
CMakeLists.txt
: 這是CMake
來確定編譯器和參數(shù)用的關(guān)鍵文件.這里可以有兩種選擇,coder可以自己寫一個(gè)或者使用CMake Tools
插件的命令來生成,我本人推薦先用命令生成一個(gè),然后再根據(jù)實(shí)際需求修改.按Ctrl+Shift+P
呼出命令面板,找到CMake:Quick Start
:CMake快速配置然后依次設(shè)置工程名稱和目標(biāo)類型,然后會(huì)自動(dòng)生成一個(gè)
CMakeLists.txt
:cmake_minimum_required(VERSION 3.0.0) project(hello VERSION 0.1.0) include(CTest) enable_testing() add_executable(hello main.cpp) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)
-
生成Makefile文件和Build:
-
首先確定使用的編譯工具包.按
Ctrl+Shift+P
呼出命令面板,定位CMake: Selecte a kit
來選擇對(duì)應(yīng)的編譯器工具包(包括使用的編譯器,Make程序等). 也可以直接按狀態(tài)欄的對(duì)應(yīng)按鈕來選擇Kit. 如果安裝正確的話(安裝環(huán)境可以參照我上一篇文章VS Code C++ 安裝和環(huán)境配置(MSVC和MinGW))會(huì)出現(xiàn)一個(gè)列表可供選擇:
選擇編譯工具包 接著執(zhí)行'CMake:Configuration'來生成對(duì)應(yīng)kit中g(shù)enerator的Makefile文件. 這一步其實(shí)對(duì)應(yīng)直接使用
CMake -G'生成器'
命令.上一步會(huì)在當(dāng)前文件夾下的build文件夾生成對(duì)應(yīng)的Makefile文件和其他CMake
的文件,接著就是build了,可以呼出命令面板執(zhí)行CMake:Build
或者直接狀態(tài)欄按Build
. 這一步其實(shí)是執(zhí)行了CMake的CMake --build ...
命令. 最終鏈接成所需要的一個(gè)binary文件.
-
后記
- VS Code的
CMake Tools
插件只是用來替代手動(dòng)使用CMake的各種命令. - 可以根據(jù)項(xiàng)目的不同需要來修改
CMakeLists.txt
- 這個(gè)插件對(duì)于
MSVC
的編譯工具包,默認(rèn)使用的是ninja
生成器. - 要查看這個(gè)插件所使用的對(duì)應(yīng)
CMake
命令,可以查看output窗口的執(zhí)行過程; 要詳細(xì)查看CMake --build
使用的參數(shù),可以查看 CMakeCache 這個(gè)文件.