visual-c++ - cmake 删除之前添加的 TARGET_COMPILE_OPTIONS
问题描述
我有一个 cmake 项目,它是一些更大环境的一部分。
我必须使用一些 cmake makros/函数来设置我的项目。
在某些时候,他们添加了一个编译标志:
TARGET_COMPILE_OPTIONS (${name} PUBLIC "$<$<CONFIG:Release>:/GL>")
但是,我想在之后删除这个标志,因为它会给我的项目带来一些不便。
但是cmake中似乎有一个错误:
我试图从INTERFACE_COMPILE_OPTIONS
and中删除标志COMPILE_OPTIONS
(这是target_compile_options
根据cmake doku添加选项)。
message
删除前后的命令显示成功,但生成的vcxproj
文件仍然包含
<WholeProgramOptimization>true</WholeProgramOptimization>
在<ItemDefinitionGroup><ClCompile>
节中。
所以似乎添加/GL
标志会触发一些内部状态更改,之后无法删除。(如果我在必须调用的宏中删除该标志的添加,则该WholeProgramOptimization
节点不会添加到 vcxproj)
我错过了什么?
我可以添加一个/GL-
作为选项,但随后我收到很多D9025
警告(用 /GL- 覆盖 /GL)
(使用 cmake 3.15 和 3.13 测试)
解决方案
事实证明,问题在于我必须使用的 cmake 脚本将优化器设置设置PUBLIC
为范围
TARGET_COMPILE_OPTIONS (${name} PUBLIC "$<$<CONFIG:Release>:/GL>")`
^^^^^^
我的项目的另一个依赖项使用相同的函数并将此标志放入其中INTERFACE_COMPILE_OPTIONS
,并且我的项目继承此选项而无法删除它。
唯一的方法似乎是固定公共脚本以使用PRIVATE
范围。这会更合乎逻辑,因为它是一个对消费者没有任何影响的内部目标属性。
推荐阅读
- facebook - 如何录制 Facebook 视频通话流?
- python - 我可以举一个简单的 python 使用 Pa11y Web 服务的例子吗?
- node.js - Discord.js/Firestore .where() 不是函数
- c++ - pbPlots 图形 png 文件是不可读的 C++
- python-3.x - 带有 joblibspark 的并行 Python:如何均匀分配作业?
- python - 如何使用 pandas 获取数据
- azure - Azure Auto ML 中的分类
- c# - 如何增加 WPF 中动画执行之间的时间?
- javascript - 为什么可以在 Chrome 的 Sources 选项卡的 Scope 部分中更改 const 值?
- python - Api 调用 post 方法抛出错误:证书验证