CMake 将警告视为错误

Com*_*sMS 11 c++ cmake compiler-warnings

如何配置 CMake 以将编译器警告视为构建期间的错误?

我知道可以-Werror通过诸如 之类的命令手动配置编译器的命令行选项target_compile_options,但我更喜欢不需要摆弄依赖于工具的选项的便携式解决方案。

Com*_*sMS 11

这可以在 CMake 3.24 及更高版本中通过COMPILE_WARNING_AS_ERRORtarget 属性进行配置。

例如,要为my_app目标启用警告作为错误,您可以编写:

set_property(TARGET my_app PROPERTY COMPILE_WARNING_AS_ERROR ON)
Run Code Online (Sandbox Code Playgroud)

您还可以通过变量为项目中的所有目标设置全局默认值CMAKE_COMPILE_WARNING_AS_ERROR

set(CMAKE_COMPILE_WARNING_AS_ERROR ON)

add_executable(my_app1 [...])
add_executable(my_app2 [...])
add_executable(my_app3 [...])
Run Code Online (Sandbox Code Playgroud)

如果用户觉得 CMakeLists.txt 文件中的设置很烦人,他们仍然可以使用--compile-no-warning-as-error配置选项覆盖它。

  • @AlexReinking 这取决于项目。经过更多思考后,我想我现在明白你的意思了。在您向我提供源代码库并且我打算在您从未测试过的编译器上构建它的情况下,“-Werror”可能会给我带来一些非常烦人的问题,即使代码原则上是好的。一般来说,我仍然不愿意警告不要使用“-Werror”,因为有很多项目这不是问题(例如,因为它们仅以二进制形式提供)。 (3认同)