news 2026/6/22 17:32:34

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/6/21 11:09:12

自学黑客(网络安全),一般人我劝你还是算了吧!

自学黑客&#xff08;网络安全&#xff09;&#xff0c;一般人我劝你还是算了吧&#xff01; PART.01 自学网络安全的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习 一再强调不要以编程为基础再开始学习网络安全&#xff0c;…

作者头像 李华
网站建设 2026/6/16 9:53:32

零基础转行网络安全:保姆级学习路线规划(2026最新)

零基础转行网络安全&#xff1a;保姆级学习路线规划&#xff08;2026最新&#xff09; 随着数字化普及与网络攻击常态化&#xff0c;网络安全行业人才缺口持续扩大&#xff0c;成为零基础转行IT的优质赛道——无需深厚编程基础&#xff0c;无需科班背景&#xff0c;只要遵循科…

作者头像 李华
网站建设 2026/6/19 19:26:15

JD 任职要求怎么映射到经历

在 2026 年的算法逻辑中&#xff0c;映射 不是简单的“复读”&#xff0c;而是将 JD 的需求 转化为你的 资产。 如果你只是把任职要求复制到经历里&#xff0c;系统会判定你“投机”&#xff1b;如果你不映射&#xff0c;系统会判定你“不匹配”。利用 AI 简历姬&#xff08;一…

作者头像 李华
网站建设 2026/6/19 19:37:45

FaceFusion深度解析:重塑AI换脸与数字人内容创作的技术革命

FaceFusion深度解析:重塑AI换脸与数字人内容创作的技术革命 当一张面容可以跨越屏幕,在光影间自由复刻与融合,我们离现实与虚拟的边界究竟还有多远? 一位年轻的电影导演正在为一部科幻短片的主角人选发愁,他急需一位符合角色气质的演员,却受困于预算和时间。然而,仅仅一…

作者头像 李华
网站建设 2026/6/21 22:53:49

HunyuanVideo-Foley 视频配音实战

AI音效新征程:HunyuanVideo-Foley视频配音实战指南 一段无声的雨中漫步视频,在AI的分析下,雨滴声、脚步声、远处雷声层层递进,一部富有感染力的短片就此诞生——这就是HunyuanVideo-Foley带来的革命。 当今的视频内容制作,音效是关键却常被低估的元素。专业的拟音师通过复…

作者头像 李华