news 2026/9/3 4:22:39

add_definitions

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
add_definitions

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

      • 基本语法
      • 常见用法示例
        • 1. 添加无值宏
        • 2. 添加带值宏
        • 3. 取消已定义的宏
      • 注意事项

在 CMake 中,add_definitions是一个用于向编译器添加预处理器定义(preprocessor definitions)的命令。这些定义会影响后续所有目标(如可执行文件、库)的编译过程,相当于在代码中使用#define定义宏,或在编译命令中添加-D(GCC/Clang)或/D(MSVC)参数。

基本语法

add_definitions(<definition> ...)

其中<definition>是预处理器定义,可以是:

  • 无值宏(如DEBUG),需用-D前缀(CMake 会自动适配不同编译器的语法);
  • 带值宏(如MAX_BUFFER=1024);
  • 取消已定义的宏(用-U前缀,如-UDEBUG)。

常见用法示例

1. 添加无值宏

向所有后续目标添加DEBUG宏,用于代码中条件编译:

add_definitions(-DDEBUG) # 等价于代码中的 #define DEBUG

在代码中可这样使用:

#ifdefDEBUGprintf("Debug mode enabled\n");#endif
2. 添加带值宏

定义一个带值的宏MAX_SIZE=2048

add_definitions(-DMAX_SIZE=2048) # 等价于 #define MAX_SIZE 2048

在代码中可直接使用该值:

intbuffer[MAX_SIZE];// 等价于 int buffer[2048];
3. 取消已定义的宏

如果之前定义了DEBUG,可以用-U取消:

add_definitions(-UDEBUG) # 取消 DEBUG 宏的定义

注意事项

  1. 作用范围
    add_definitions全局生效的,会影响从该命令开始到后续所有add_executableadd_library定义的目标。这可能导致不必要的宏污染(例如,某个目标不需要该宏却被强制添加)。

  2. 现代 CMake 推荐用法
    对于 CMake 3.0+,更推荐使用target_compile_definitions替代add_definitions。它可以为特定目标添加宏定义,避免全局污染:

    # 只为 my_target 目标添加 DEBUG 宏(PRIVATE 表示仅该目标内部使用) target_compile_definitions(my_target PRIVATE DEBUG)

    其中PRIVATE可替换为PUBLIC(目标及其依赖者都生效)或INTERFACE(仅依赖者生效),更灵活控制宏的作用范围。

  3. 平台兼容性
    CMake 会自动将-D转换为对应编译器的语法(如 MSVC 用/D),因此无需针对不同编译器修改写法。

  4. CMAKE_CXX_FLAGS等的区别
    add_definitions专门用于预处理器定义,而CMAKE_CXX_FLAGS是添加编译器 flags(如-Wall警告选项)。两者作用不同,不应混用。

总结:add_definitions适合简单场景下添加全局预处理器定义,但现代 CMake 更推荐使用目标级别的target_compile_definitions以提高工程的可维护性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:59:36

孩子近视度数一路狂飙?看看是不是这些原因

‍  孩子近视后&#xff0c;家长最揪心的莫过于看着度数一次次复查都往上涨&#xff0c;明明已经叮嘱了少看电子屏幕&#xff0c;也简单做了护眼措施&#xff0c;却还是挡不住度数“狂飙”。很多家长把原因归结为户外活动少、用眼环境差等常见问题&#xff0c;却忽略了那些藏…

作者头像 李华
网站建设 2026/9/2 23:00:23

2026 年 Google Ads 广告投放风险点:为什么需要指纹浏览器?

随着 2026 年的到来&#xff0c;Google Ads 的风控已经从传统的 IP 检查升级为更高级的行为分析系统。普通的代理 IP 或单纯的浏览器操作&#xff0c;已经难以完全规避风险。账户封号、广告限流、审核延迟等问题&#xff0c;越来越频繁地发生在广告投放团队中。本文将从 Google…

作者头像 李华
网站建设 2026/9/2 23:51:57

阿里2026版Spring全家桶高级笔记

不知道各位Java好大哥们闲的时候会不会去关注Spring目前的官网&#xff0c;你会发现他的slogan是: Spring makes Java Simple。它让Java的开发变得更加简单。某种意义上来说&#xff1a;是Spring成就了Java&#xff01;但随之而来的就是&#xff1a;由他之后诞生出来的各种组件…

作者头像 李华
网站建设 2026/9/2 22:59:51

悬鉴与“养护人叙事环”的建构:算法治理的微观政治学

悬鉴与“养护人叙事环”的建构&#xff1a;算法治理的微观政治学笔者&#xff1a;岐金兰摘要当代算法治理陷入了“批判愈多&#xff0c;治理愈空”的实践困境。其根源在于主流范式困于“主体-客体”框架&#xff0c;将“算法”视为待规制的静态客体&#xff0c;而系统性忽视了算…

作者头像 李华
网站建设 2026/9/3 1:48:15

基于深度学习的图像风格迁移系统[python]-计算机毕业设计源码+LW文档

摘要&#xff1a;图像风格迁移作为计算机视觉和图形学中的热门研究方向&#xff0c;旨在将一幅图像的艺术风格应用到另一幅图像的内容上&#xff0c;创造出具有特定风格的新图像。本文深入探讨了基于深度学习的图像风格迁移技术&#xff0c;阐述了其基本原理、常见方法&#xf…

作者头像 李华