基本概念
target:代表可执行程序或库(elf,so)
add_executable
add_library
add_custom_command
project:
command:
target properties:
CMakeCache.txt : cmake的配置缓存,删除该文件与删除build目录作用相同
- cmake构建系统是由一系列target组成,cmake就是围绕target进行展开的。
预设-preset
CMakePresets.json :CMakePresets.json 是 CMake 3.19+ 引入的一个配置文件,旨在将 CMake 的配置选项(如工具链、生成器、缓存变量等)标准化、版本化并保存到项目中,从而消除对冗长命令行参数的依赖,实现一键配置和跨团队/跨平台的一致构建。
基本结构:
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "linux-debug",
"displayName": "Linux Debug",
"description": "使用主机 GCC 进行调试构建",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_CXX_FLAGS": "-Wall -Wextra"
}
},
{
"name": "arm-cross-release",
"displayName": "ARM Cross-Compile Release",
"description": "交叉编译 ARM 的发布版本",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build/arm-release",
"toolchainFile": "${sourceDir}/toolchains/arm-linux-gnueabihf.cmake",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "android-arm64",
"displayName": "Android ARM64",
"description": "使用 NDK 交叉编译 Android",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/android",
"toolchainFile": "$env{ANDROID_NDK}/build/cmake/android.toolchain.cmake",
"cacheVariables": {
"ANDROID_ABI": "arm64-v8a",
"ANDROID_PLATFORM": "android-24"
}
}
],
"buildPresets": [
{
"name": "debug-build",
"configurePreset": "linux-debug",
"jobs": 8
},
{
"name": "arm-build",
"configurePreset": "arm-cross-release",
"targets": ["all", "install"]
}
]
}
继承与复用:预设支持继承,避免重复配置:
{
"configurePresets": [
{
"name": "base",
"hidden": true,
"generator": "Ninja",
"cacheVariables": { "CMAKE_EXPORT_COMPILE_COMMANDS": true }
},
{
"name": "arm-base",
"inherits": "base",
"toolchainFile": "${sourceDir}/toolchains/arm.cmake"
},
{
"name": "arm-debug",
"inherits": ["arm-base", "debug-opts"]
}
]
}
使用预设
# 列出所有可用的配置预设
cmake --list-presets
# 使用特定预设进行配置(替代 cmake -B build -D...)
cmake --preset=arm-cross-release
# 使用构建预设进行构建(替代 cmake --build build --target install -j8)
cmake --build --preset=arm-build