在我的项目中,我在全局上使用CMAKE_CXX_FLAGS
定义了一些通用编译选项。其他一些选项(在普通情况下应该应用于所有目标)是使用add_compile_options()
在我的主CMakeLists文件中指定的。
例如,我希望将标志-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()
设置的。而target没有任何自己的附加标志。因此,在从列表中删除唯一的条目后,我将得到一个空列表。调用set_target_properties()失败时出错:
使用不正确的参数数调用set_target_properties。
有没有办法彻底清除一些目标属性?我使用的是CMake 3.11
发布于 2018-05-24 19:48:16
把我的评论变成回答
只需添加引号:
set_target_properties(ext_lib PROPERTIES COMPILE_OPTIONS "${EXTLIB_COMPILE_FLAGS}")
现在--如果EXTLIB_COMPILE_FLAGS
变量是空的--你就会得到一个空字符串,而不是一个“缺少的参数”。
https://stackoverflow.com/questions/50512905
复制相似问题