首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我什么时候会使用target_compile_definitions(.)vs set(COMPILE_DEFINITIONS .)

我什么时候会使用target_compile_definitions(.)vs set(COMPILE_DEFINITIONS .)
EN

Stack Overflow用户
提问于 2017-12-01 05:08:15
回答 1查看 1.9K关注 0票数 0

我很难理解何时使用target_compile_definitions(...)set(COMPILE_DEFINITIONS ...)target_compile_definitions只会影响特定的目标吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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()做什么和属性是什么是两个正交的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47586974

复制
相关文章

相似问题

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