【问题标题】:CMake: how to clear target compile optionsCMake:如何清除目标编译选项
【发布时间】:2018-11-03 21:23:43
【问题描述】:

在我的项目中,我在全局范围内使用CMAKE_CXX_FLAGS 定义了一些通用编译选项。在我的主 CMakeLists 文件中使用 add_compile_options() 指定了一些其他选项,在常见情况下应该应用于所有目标。

例如,我希望将标志 -Wconversion 应用于所有目标。 但是我有一个外部库,在启用此选项的情况下会产生许多警告。所以我只想禁用这个特定库的选项:

get_target_property(EXTLIB_COMPILE_FLAGS ext_lib COMPILE_OPTIONS )
list(REMOVE_ITEM EXTLIB_COMPILE_FLAGS -Wconversion)
set_target_properties(ext_lib PROPERTIES COMPILE_OPTIONS ${EXTLIB_COMPILE_FLAGS } )

但现在只有-Wconversion 是使用add_compile_options() 设置的。 并且目标没有任何自己的附加标志。因此,从列表中删除唯一条目后,我将得到一个空列表。调用 set_target_properties() 失败并出现错误:

使用错误数量的参数调用 set_target_properties。

有什么方法可以彻底清除一些目标属性吗? 我正在使用 CMake 3.11

【问题讨论】:

  • 只是添加引号? set_target_properties(ext_lib PROPERTIES COMPILE_OPTIONS "${EXTLIB_COMPILE_FLAGS}")

标签: c++ gcc cmake


【解决方案1】:

把我的评论变成答案

只需添加引号:

set_target_properties(ext_lib PROPERTIES COMPILE_OPTIONS "${EXTLIB_COMPILE_FLAGS}")

现在 - 如果 EXTLIB_COMPILE_FLAGS 变量为空 - 你最终会得到一个空字符串,而不是“缺少参数”。

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2021-06-24
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多