CMake基础使用指南
CMake基础使用指南
安装
方式1:使用Git安装(官方源)
# 获取最新源码
git clone https://github.com/Kitware/CMake.git
cd CMake# 配置安装路径(默认/usr/local)
./bootstrap --prefix=/custom/path# 编译并安装
make -j$(nproc)
sudo make install
方式2:使用国内镜像加速(推荐中国用户)
# 使用清华镜像下载二进制包
wget https://mirrors.tuna.tsinghua.edu.cn/cmake/latest/cmake-3.27.0-linux-x86_64.tar.gz# 解压并设置环境
tar -zxvf cmake-*.tar.gz
sudo mv cmake-3.27.0-linux-x86_64 /opt/cmake
echo 'export PATH=/opt/cmake/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
使用
CMakeLists.txt核心结构
cmake_minimum_required(VERSION 3.12) # 最低版本要求
project(MyProject # 项目定义VERSION 1.0.0DESCRIPTION "示例项目"LANGUAGES CXX
)# 添加源代码目标
add_executable(${PROJECT_NAME} src/main.cpp src/utils.cpp
)# 头文件包含
target_include_directories(${PROJECT_NAME}PRIVATE include/${CMAKE_CURRENT_BINARY_DIR}/generated
)# 编译器特性设置
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
CMake构建目录管理
推荐使用源外构建(out-of-source build):
project-root/
├── CMakeLists.txt # 主配置文件
├── src/ # 源代码
├── include/ # 头文件
└── build/ # 构建目录(用户创建)
操作流程:
# 创建构建目录
mkdir build && cd build# 生成构建系统
cmake .. # 编译项目
cmake --build .# 清理构建
cd build && rm -rf *
自定义宏定义规范
重要规则:
- 禁止使用
CMAKE_
前缀(保留给CMake内部) - 禁止使用
_
开头的名称 - 推荐使用
<PROJECT>_
前缀命名规则
在CMakeLists.txt中定义宏:
# 项目全局宏
add_compile_definitions(MY_PROJECT_DEBUG_MODE=1MY_PROJECT_VERSION="${PROJECT_VERSION}"
)# 目标特定宏
target_compile_definitions(${PROJECT_NAME} PRIVATEUSE_FEATURE_XMAX_ITEMS=100
)
构建时传入环境变量宏
命令行传参方式:
cmake -B build -DMY_BUILD_MODE=Production -DMY_LOG_LEVEL=3
在代码中使用:
// main.cpp
#ifdef MY_PROJECT_DEBUG_MODE// 调试专用代码
#endif#if MY_LOG_LEVEL > 2// 详细日志
#endif
CMake接收参数处理:
if(DEFINED MY_BUILD_MODE)target_compile_definitions(${PROJECT_NAME} PRIVATE BUILD_MODE_${MY_BUILD_MODE})
endif()
分步构建
阶段式构建配置:
# 阶段1: 配置生成
add_custom_target(configure_step DEPENDS ...)# 阶段2: 主构建
add_custom_target(build_main DEPENDS configure_step)
add_dependencies(${PROJECT_NAME} build_main)# 阶段3: 测试
enable_testing()
add_test(NAME basic_test COMMAND test_binary)
命令行分步执行:
# 只执行配置阶段
cmake --build build --target configure_step# 只编译主代码
cmake --build build --target build_main# 执行测试套件
cd build && ctest# 完整构建流程
cmake --build build --target all
多构建阶段依赖关系:
配置阶段 (configure_step)↓
主构建阶段 (build_main)↓
测试阶段 (test_suite)↓
安装阶段 (install_target)
最佳实践补充
-
跨平台宏定义:
if(UNIX AND NOT APPLE)add_compile_definitions(LINUX_PLATFORM) elseif(WIN32)add_compile_definitions(WINDOWS_PLATFORM) endif()
-
构建类型参数化:
cmake -B build/Debug -DCMAKE_BUILD_TYPE=Debug cmake -B build/Release -DCMAKE_BUILD_TYPE=Release
-
国内镜像加速配置:
# 永久配置环境变量 echo 'export CMAKE_PREFIX_PATH="https://mirrors.tuna.tsinghua.edu.cn/cmake"' >> ~/.bashrc
https://github.com/0voice