在我的项目中,我使用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
答案 0 :(得分:3)
将我的评论转化为答案
只需添加引号:
set_target_properties(ext_lib PROPERTIES COMPILE_OPTIONS "${EXTLIB_COMPILE_FLAGS}")
现在 - 如果EXTLIB_COMPILE_FLAGS
变量为空 - 你最终得到一个空字符串,而不是#34;缺少参数"。