我很难理解何时使用target_compile_definitions(...)和set(COMPILE_DEFINITIONS ...)。target_compile_definitions只会影响特定的目标吗?
发布于 2017-12-04 13:47:21
需要认识到的一件事是,set(COMPILE_DEFINITIONS ...)不会以任何方式改变任何目标。
什么意思?那么,您只需创建一个新变量(称为COMPILE_OPTIONS),它将在第一次配置运行后缓存。就这样。其他什么都不会发生。
现在,接下来要认识到的是,存在属性,这就是您的意思。属性是目标、目录、源文件等的一些不同的“上下文”、“有效负载”。文档说:
文档还指出,COMPILE_DEFINITIONS是一个同时存在于目录范围和目标范围的属性。这意味着您所拥有的每个目录和您声明的每个目标都具有此属性,而且每个目录的属性值都可能不同。一种是使用set_property()为所需的作用域设置属性。
现在,target_compile_definitions()是什么?这就相当于set_property(TARGET ... PROPERTY COMPILE_DEFINITIONS ...)。
因此,从本质上说,所有这些target_函数都只是这样做的,但是它们有一个不同的函数。但是,CMake并不是每个属性都有一个函数,所以这里还有一些不一致的地方要处理。
但是,请记住,set()做什么和属性是什么是两个正交的东西。
https://stackoverflow.com/questions/47586974
复制相似问题