在 CMake 文档中,我们可以阅读:
Adds flags to the compiler command line for sources in the current directory and below.
COMPILE_DEFINITIONS property on directories
COMPILE_DEFINITIONS: Preprocessor definitions for compiling a directory's sources.
COMPILE_DEFINITIONS property on targets
COMPILE_DEFINITIONS: Preprocessor definitions for compiling a target's sources.
COMPILE_DEFINITIONS property on source files
COMPILE_DEFINITIONS: Preprocessor definitions for compiling a source file.
COMPILE_DEFINITIONS
和 add_definitions
功能似乎重叠。 COMPILE_DEFINITIONS
属性似乎更灵活。
所以看来 COMPILE_DEFINITIONS 属性完成了 add_definitions 所做的一切,甚至更多。
那么,在哪些情况下必须因为不能使用 COMPILE_DEFINITIONS 属性而调用 add_definitions?
最佳答案
add_definitions
自从十多年前第一个版本的 CMake 上线以来,CMake 就已经存在。
COMPILE_DEFINITIONS
只是更新、更灵活、更精细的方法。
它们将永远存在:由于世界上 99% 以上的现有 CMakeLists.txt
文件都使用 add_definitions
,因此删除它是不明智的. CMake 开发人员非常努力地保持向后兼容性……有时会损害清晰度和简单性。有时以多种不同的方式做本质上相同的事情。
所以:add_definitions
主要用于配置预先存在的 CMakeLists 文件——对于那些在引入 COMPILE_DEFINITIONS
之前就已经存在的项目。而且,由于这些项目使用它,任何基于人们从阅读这些 CMakeLists 文件中学到的东西的新项目也很可能使用 add_definitions
。
但是如果单独使用 COMPILE_DEFINITIONS
就足以满足您的需求,那肯定没有错。
关于c++ - CMake:何时使用 add_definitions 而不是 set_target_properties(目标 PROPERTIES COMPILE_DEFINITIONS 定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15223779/