2013-03-05 23 views
27

在CMake的文档中,我们可以读:CMake的:当使用add_definitions代替set_target_properties(目标属性COMPILE_DEFINITIONS定义)

add_definitions

再添标志来编译器命令行用于在源当前目录和下面。

COMPILE_DEFINITIONS property on directories

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

COMPILE_DEFINITIONS property on targets

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

COMPILE_DEFINITIONS property on source files

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

COMPILE_DEFINITIONSadd_definitions功能似乎重叠。 COMPILE_DEFINITIONS属性看起来更加灵活。

如此看来,COMPILE_DEFINITIONS财产做一切add_definitions做,甚至更多。

那么,在这种情况下必须我们调用add_definitions因为COMPILE_DEFINITIONS属性不能使用?

回答

34

自CMake第一次构建十多年前上线以来,add_definitions已存在于CMake中。

COMPILE_DEFINITIONS只是更新,更灵活和更细致的方式来做到这一点。

它们总是都是:由于世界上99%以上的CMakeLists文件使用add_definitions,因此删除它并不明智。 CMake开发人员非常努力地维护向后兼容性......有时会损害清晰度和简单性。有时候用多种不同的方式来做基本相同的事情。

所以:add_definitions主要用于配置预先存在的CMakeLists文件 - 对于在引入COMPILE_DEFINITIONS之前已经存在的项目。而且,由于这些项目使用它,任何基于人们通过阅读这些CMakeLists文件而学到的新项目也很可能使用add_definitions。

但是,如果单独使用COMPILE_DEFINITIONS就足以满足您的需求,那肯定没有问题。

+7

你能解释一下如何知道这个吗?这是否在文档中?为了理解CMake的奥秘,你需要阅读什么? – Praxeolitic 2014-06-15 20:39:09

3

我不是说必须使用

这只是你的习惯的问题。

一些建议:

  • 使用add_definitions当你想添加到编译器在当前目录及以下来源的命令行 。它只是短于 类型。

  • 使用COMPILE_DEFINITIONS用于优化目标或特定 来源。

+1

谢谢。我的问题更多的是了解在哪些情况下add_definitions是有用的。因为看起来COMPILE_DEFINITIONS属性的功能相同甚至更多。 – Korchkidu 2013-03-05 19:13:08

+0

我给你一个理由 - 想简化 - 使用add_definition。要完全控制 - 使用set_properties和COMPILE_DEFINITION。 – 2013-03-06 09:22:37

相关问题