在我的项目中,我定义了一些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 } )
Run Code Online (Sandbox Code Playgroud)
但现在只-Wconversion使用add_compile_options(). 并且目标没有任何自己的附加标志。因此,从列表中删除唯一条目后,我将得到一个空列表。调用 set_target_properties() 失败并出现错误:
set_target_properties 调用的参数数量不正确。
有什么方法可以完全清除某些目标属性?我正在使用 CMake 3.11
把我的评论变成答案
只需添加引号:
set_target_properties(ext_lib PROPERTIES COMPILE_OPTIONS "${EXTLIB_COMPILE_FLAGS}")
Run Code Online (Sandbox Code Playgroud)
现在 - 如果EXTLIB_COMPILE_FLAGS变量为空 - 您最终会得到一个空字符串,而不是“缺少的参数”。
| 归档时间: |
|
| 查看次数: |
3313 次 |
| 最近记录: |