如何配置 CMake 以在构建过程中将编译器警告视为错误?
我知道可以通过像
-Werror
这样的命令为像 target_compile_options
这样的编译器手动配置命令行选项,但我更喜欢一种不需要摆弄依赖于工具的选项的便携式解决方案。
COMPILE_WARNING_AS_ERROR
目标属性进行配置。
例如,要为
my_app
目标启用警告作为错误,您可以编写:
set_property(TARGET my_app PROPERTY COMPILE_WARNING_AS_ERROR ON)
CMAKE_COMPILE_WARNING_AS_ERROR
变量为项目中的所有目标设置全局默认值:
set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
add_executable(my_app1 [...])
add_executable(my_app2 [...])
add_executable(my_app3 [...])
如果用户觉得 CMakeLists.txt 文件中的设置很烦人,他们仍然可以使用
--compile-no-warning-as-error
配置选项覆盖它。
对于具有固定且可预测工具链的 CI 系统来说,将警告视为错误是一种很好的做法,但强制所有用户是“不合适”的。许多人可能使用不同的工具链,其中包含不同的警告集和这些警告的敏感性。默认情况下启用 -Werror
会导致消费者的构建损坏,这是一种不好的做法。
Gentoo 打包档案也禁止这样做(很重要,因为它是基于源代码的发行版):
https://devmanual.gentoo.org/ebuild-writing/common-mistakes/index.html将警告视为错误对开发者有利,但对消费者不利。 执行此操作的最佳方法是将新的(从 CMake 3.24 开始)变量
CMAKE_COMPILE_WARNING_AS_ERROR
设置为
ON
仅,当您知道这样做是安全的时。也就是说,它不应该默认开启(但如果你坚持,那么必须有一种方法可以禁用它)。 设置此功能有很多好方法:
您可以将其添加到
的
cacheVariables
部分
您可以在set
将其
ON
当您想要打开或关闭它时,只需在命令行中传递它即可。