要使用cmake和vcpkg組織一個完整的現代cpp項目,一般來說需要三個文件
vcpkg.json描述第三方依賴項
//vcpkg.json
{"dependencies": ["fmt"]
}//安裝,在vcpkg.json目錄執行
vcpkg install
CMakePresets.json定義項目的本質屬性(What):它聲明了項目由什么文件構成、目標是什么、以及它有什么依賴。這些是項目固有的、不隨用戶環境變化的屬性。
CMakeLists.txt定義項目的配置方式(How):它聲明了如何調用 CMake 來配置項目,為用戶和環境提供常用的預設參數。這些是用戶或平臺相關的、可變的配置選項。
//CMakeLists.txt
set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)cmake_minimum_required(VERSION 3.10) //指定構建當前項目所需的最低 CMake 版本project(HelloWorld) find_package(fmt CONFIG REQUIRED)add_executable(HelloWorld helloworld.cpp)target_link_libraries(HelloWorld PRIVATE fmt::fmt)//CMakePresets.json{"version": 3,"configurePresets": [{"name": "vcpkg","generator": "MinGW Makefiles","binaryDir": "${sourceDir}/build","cacheVariables": {"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",//默認可能出錯,特別是在有多個編譯器的情況下,例如可能存在MSVC和MinGW "VCPKG_TARGET_TRIPLET": "x64-mingw-dynamic"}}]
}
兩個文件寫完后通過?CMake 項目配置命令,初始化項目的構建環境
// build配置文件地址 ./源代碼地址 debug preset的name
cmake -B build -S ./ --preset debug
之后通過build即可完成項目構建!
在整個項目構建時,如果直接使用會報錯找不到第三方包,原因是直接編譯運行時未像 CMake 那樣自動引入第三方庫的路徑,需要額外配置.vscode
由于cmake具有跨平臺性,所以一般項目采用cmake+vcpkg是很好的方案!