当前位置: 首页 > news >正文

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 *

自定义宏定义规范

重要规则:

  1. 禁止使用CMAKE_前缀(保留给CMake内部)
  2. 禁止使用_开头的名称
  3. 推荐使用<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)

最佳实践补充

  1. 跨平台宏定义​:

    if(UNIX AND NOT APPLE)add_compile_definitions(LINUX_PLATFORM)
    elseif(WIN32)add_compile_definitions(WINDOWS_PLATFORM)
    endif()
    
  2. 构建类型参数化​:

    cmake -B build/Debug -DCMAKE_BUILD_TYPE=Debug
    cmake -B build/Release -DCMAKE_BUILD_TYPE=Release
    
  3. 国内镜像加速配置​:

    # 永久配置环境变量
    echo 'export CMAKE_PREFIX_PATH="https://mirrors.tuna.tsinghua.edu.cn/cmake"' >> ~/.bashrc
    

https://github.com/0voice

http://www.dtcms.com/a/312098.html

相关文章:

  • QtC++ 调用 tesseract开源库 搭配 Opencv 实现文字识别:从tesseract库基本介绍到实际应用实现
  • 【华为OD机试】计算图形面积
  • 关于Egret引擎的一些思考
  • 单位长度上的RC参数
  • 【补题】Codeforces Round 715 (Div. 1) B. Almost Sorted
  • linux中pthread_t 的值与top -Hp中线程id值的区别
  • 装 饰 器 模 式
  • 深入 Go 底层原理(七):逃逸分析
  • C++ 11 模板萃取
  • 丑数-优先队列/三指针/动态规划
  • Linux 动静态库的制作和使用
  • 深度剖析PyTorch torch.compile的性能曲线与优化临界点
  • SpringBoot 01 IOC
  • PyTorch 张量核心操作——比较、排序与数据校验
  • java实现运行SQL脚本完成数据迁移
  • 通俗易懂解释Java8 HashMap
  • Rust进阶-part1-智能指针概述-box指针
  • 【多模态】DPO学习笔记
  • 嵌入式文件系统
  • Java中Lambda 表达式的解释
  • PCB铜浆塞孔工艺流程
  • 如何快速解决PDF解密新方法?
  • 使用C++实现日志(1)
  • 疏老师-python训练营-Day33 MLP神经网络的训练
  • AbstractExecutorService:Java并发核心模板解析
  • 深入 Go 底层原理(一):Slice 的实现剖析
  • 二叉树链式结构的实现
  • lesson31:Python异常处理完全指南:从基础到高级实践
  • 乌鸫科技前端二面
  • Go语言中的闭包详解