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

CMake Debug/Release配置生成器表达式解析

在 CMake 中,CONFIG:Debug 生成器表达式中的 Debug/Release 配置是由构建系统在运行时决定的,具体取决于以下两种场景:

1. 单配置生成器(如 Makefile、Ninja)

  • 在配置阶段通过 CMAKE_BUILD_TYPE 指定:
    cmake -DCMAKE_BUILD_TYPE=Debug ..   # 设置为 Debug
    cmake -DCMAKE_BUILD_TYPE=Release .. # 设置为 Release
    
  • 此时 $<$<CONFIG:Debug>:DEBUG> 会自动检测该值,若为 Debug 则添加 DEBUG 宏定义。

2. 多配置生成器(如 Visual Studio、Xcode、Ninja Multi-Config)

  • 构建时通过命令行或 IDE 选择配置:
    cmake --build . --config Debug   # 构建 Debug 版本
    cmake --build . --config Release # 构建 Release 版本
    
  • 此时生成器表达式在构建阶段动态判断当前配置(无需提前设置 CMAKE_BUILD_TYPE)。

关键点总结:

场景配置设置方式表达式生效时机
单配置生成器cmake -DCMAKE_BUILD_TYPE=XXX配置阶段确定
多配置生成器cmake --build --config XXX 或 IDE构建阶段动态判断

示例行为:

  • 当构建 Debug 时:
    $<$<CONFIG:Debug>:DEBUG>  → 添加 -DDEBUG
    $<$<CONFIG:Release>:NDEBUG> → 忽略
    
  • 当构建 Release 时:
    $<$<CONFIG:Debug>:DEBUG>  → 忽略
    $<$<CONFIG:Release>:NDEBUG> → 添加 -DNDEBUG
    

验证方法:

在构建命令后检查编译参数:

# Debug 构建下查看宏定义
cmake --build . --config Debug --verbose | grep "DEFINES"# 输出应包含:-DDEBUG

最佳实践:始终通过生成器表达式处理配置相关逻辑(如你的代码所示),这样能确保单配置和多配置生成器均兼容。

http://www.lryc.cn/news/606905.html

相关文章:

  • Kafka Streams 并行处理机制深度解析:任务(Task)与流线程(Stream Threads)的协同设计
  • 调试 Rust 生成的 WebAssembly
  • 阻塞队列特性
  • K-Means聚类:当数据没有标签时,如何让计算机自动“物以类聚”?
  • 字符串的高效处理String‘Builder类(高频率的字符串拼接)
  • 每日面试题18:基本数据类型和引用数据类型的区别
  • 转换图(State Transition Diagram)和时序图(Sequence Diagram)画图流程图工具
  • PHP在现代Web开发中的应用与优势分析
  • 汽车EDI:Vitesco EDI 项目案例
  • 在Centos7中安装gitlab
  • flutter-boilerplate-project 学习笔记
  • gitlab+jenkins的ci/cd部署
  • 《R for Data Science (2e)》免费中文翻译 (第3章) --- Data transformation(1)
  • ceph 14.2.22 nautilus Balancer 数据平衡
  • gitlab 开发人员无法创建分支,管理员配置分支权限
  • 「一键召唤 007」:开源多智能体 JoyAgent-JDGenie 如何让你的 AI 产品从 Demo 到 真香 只差 Ctrl+C / Ctrl+V?
  • Linux 内存管理之 Rmap 反向映射
  • 07-netty基础-自定义编解码器
  • Linux信号捕捉与穿插中断
  • linux中posix消息队列的使用记录
  • 鸿蒙系统下的动态负载均衡实战:让分布式任务调度更智能
  • 等保2.0指南:从系统等级划分到测评全流程攻略
  • 【PyTorch✨】01 初识PyTorch
  • 算法提升之数学(唯一分解定理)
  • 【unity小技巧】封装unity适合2D3D进行鼠标射线检测,获取鼠标位置信息检测工具类
  • Linux通用SPI作为Master——回环测试
  • 多屏混合KVM Dock扩展坞 如何打造极致高效生产力
  • 9.1无法恢复的错误与 panic!
  • Codeforces Round 1040 (Div. 2) A - D题详细题解
  • 第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2021年10月24日真题