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

CMake: how to clear target compile options

本文关键字:清除 目标 编译选项 何清除 CMake      更新时间:2023-10-16

在我的项目中,我使用全局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}")

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