在CMake文档中,我们可以读到:
将标志添加到当前目录及以下目录中源的编译器命令行中。
COMPILE_DEFINITIONS:编译目录源代码的预处理器定义。
COMPILE_DEFINITIONS:编译目标源的预处理定义。
COMPILE_DEFINITIONS:编译源文件的预处理定义。
COMPILE_DEFINITIONS
和add_definitions
功能似乎重叠。COMPILE_DEFINITIONS
属性似乎更灵活。
因此,COMPILE_DEFINITIONS属性似乎完成了add_definitions所做的一切,甚至更多。
因此,在哪种情况下,由于不能使用属性,必须要使用add_definitions?
发布于 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
就足以满足您的需求,那么这当然没有什么问题。
发布于 2018-07-09 01:15:39
如果要添加compile definition for target
,可以使用更方便的函数target_compile_definitions
,例如添加多个compile definitions
一次,例如:
add_executable (trie_io_test demo12.cpp)
target_compile_definitions(trie_io_test PRIVATE UNIT_TESTING=1 IO_TEST=1)
您可以看到这个问题如何为目标可执行文件设置多个编译定义,也可以从definitions.html获得更多信息。
发布于 2013-03-05 18:22:39
我并不是说必须使用。
这只是你习惯的问题。
一些建议:
https://stackoverflow.com/questions/15223779
复制相似问题