如何从CMake命令行禁用第三方库的-Werror编译选项?
解决第三方库强制-Werror导致警告转错误的问题
方法1:针对特定警告取消错误标记
如果只是某个特定警告(比如你遇到的"suggest putting braces around whatever"对应-Wmissing-braces)被当成错误,直接在你的项目CMakeLists里添加:
add_compile_options(-Wno-error=missing-braces)
这个会让编译器把该警告从错误列表中排除,既不影响其他-Werror的检查,又能绕过这个无害警告的报错。
方法2:修改第三方库目标的编译选项
如果第三方库在CMake中被定义为一个目标(比如ThirdPartyLib),可以在你的项目CMakeLists里找到该目标后,移除它的-Werror选项:
# 假设第三方库的目标名为ThirdPartyLib,先获取现有编译选项 get_target_property(OLD_COMPILE_OPTS ThirdPartyLib COMPILE_OPTIONS) # 过滤掉-Werror选项 list(REMOVE_ITEM OLD_COMPILE_OPTS "-Werror") # 重新设置目标的编译选项 set_target_properties(ThirdPartyLib PROPERTIES COMPILE_OPTIONS "${OLD_COMPILE_OPTS}")
这个方法直接针对第三方库的目标修改,不会影响你自己的代码编译设置。
方法3:重写CMake编译命令模板
通过修改CMAKE_CXX_COMPILE_OBJECT变量,替换掉编译命令中的-Werror:
string(REPLACE "-Werror" "" CMAKE_CXX_COMPILE_OBJECT "${CMAKE_CXX_COMPILE_OBJECT}")
这个会全局修改C++编译命令的模板,所有使用该模板的编译都会去掉-Werror,适合需要完全禁用第三方库-Werror的场景。
注意:以上方法都不需要修改第三方库的CMakeLists.txt,只需要在你自己项目的CMake配置中添加即可。
内容的提问来源于stack exchange,提问作者Victor Eijkhout
相关产品推荐
相关产品推荐

