CMake:如何清除目标编译选项

时间:2018-05-24 15:20:24

标签: c++ gcc cmake

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

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

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

1 个答案:

答案 0 :(得分:3)

将我的评论转化为答案

只需添加引号:

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

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