首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMake:何时使用add_definitions而不是set_target_properties(目标属性COMPILE_DEFINITIONS定义)

CMake:何时使用add_definitions而不是set_target_properties(目标属性COMPILE_DEFINITIONS定义)
EN

Stack Overflow用户
提问于 2013-03-05 12:25:44
回答 3查看 48.7K关注 0票数 40

在CMake文档中,我们可以读到:

添加

将标志添加到当前目录及以下目录中源的编译器命令行中。

编译

COMPILE_DEFINITIONS:编译目录源代码的预处理器定义。

编译

COMPILE_DEFINITIONS:编译目标源的预处理定义。

编译

COMPILE_DEFINITIONS:编译源文件的预处理定义。

COMPILE_DEFINITIONSadd_definitions功能似乎重叠。COMPILE_DEFINITIONS属性似乎更灵活。

因此,COMPILE_DEFINITIONS属性似乎完成了add_definitions所做的一切,甚至更多。

因此,在哪种情况下,由于不能使用属性,必须要使用add_definitions?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-07 04:40:45

add_definitions自十多年前首次发布CMake以来就一直存在于CMake中。

COMPILE_DEFINITIONS只是一种新的、更灵活、更细粒度的方法。

因为世界上现有的99%+文件都使用add_definitions,所以删除它是不明智的。CMake开发人员非常努力地维护向后兼容性.有时损害了清晰度和简单性。有时以多种不同的方式做同样的事情。

因此:add_definitions主要用于配置预先存在的CMakeLists文件--用于自COMPILE_DEFINITIONS引入之前就已经存在的项目。而且,由于这些项目使用它,任何基于人们从阅读这些CMakeLists文件中学到的东西的新项目也很可能使用add_definitions

但是,如果仅使用COMPILE_DEFINITIONS就足以满足您的需求,那么这当然没有什么问题。

票数 45
EN

Stack Overflow用户

发布于 2018-07-09 01:15:39

如果要添加compile definition for target,可以使用更方便的函数target_compile_definitions,例如添加多个compile definitions一次,例如:

代码语言:javascript
运行
复制
add_executable (trie_io_test demo12.cpp)
target_compile_definitions(trie_io_test PRIVATE UNIT_TESTING=1 IO_TEST=1)

您可以看到这个问题如何为目标可执行文件设置多个编译定义,也可以从definitions.html获得更多信息。

票数 7
EN

Stack Overflow用户

发布于 2013-03-05 18:22:39

我并不是说必须使用

这只是你习惯的问题。

一些建议:

  • 如果要为当前目录及以下目录中的源代码添加到编译器命令行,请使用add_definitions。它只是更短的打字。
  • 使用COMPILE_DEFINITIONS对目标或特定源进行微调。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15223779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档