要使用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是很好的方案!