Cppcheck Cmake 集成:基于警告中止构建
Posted
技术标签:
【中文标题】Cppcheck Cmake 集成:基于警告中止构建【英文标题】:Cppcheck Cmake integration: abort build on warning 【发布时间】:2020-01-26 21:10:54 【问题描述】:我刚开始在一个C++
项目中使用cppcheck
,了解到它可以集成到cmake
中。
在我的cmake
项目中,我通过
CMakeLists.txt
文件中
find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
if(NOT CMAKE_CXX_CPPCHECK)
message(FATAL_ERROR "Could not find the program cppcheck.")
endif()
list(APPEND CMAKE_CXX_CPPCHECK "--enable=all" )
现在,在编译过程中,cppcheck
运行良好。我已经为我的所有编译器警告设置了-WError
,有没有办法对cppcheck
执行相同的操作,即在抛出cppcheck
警告的情况下使构建失败?
【问题讨论】:
【参考方案1】:在您的情况下,当 make 程序调用编译器、链接器或任何其他工具(如 cppcheck)时,会评估程序的返回值。如果任何程序返回值0
,则make
认为这是成功的,因此它会继续。如果任何程序返回另一个值然后0
,则make
失败并且不会继续。这是一个众所周知的约定。因此,您所要做的就是配置cppcheck
,使其在成功的情况下返回0
,在失败的情况下返回另一个值。您可以使用参数--error-exitcode=1
:
list(APPEND CMAKE_CXX_CPPCHECK "--enable=all" "--error-exitcode=10")
来自 cppcheck 文档:
--error-exitcode=<n> If errors are found, integer [n] is returned instead of the default '0'. '1' is returned if arguments are not valid or if no input files are provided. Note that your operating system can modify this value, e.g. '256' can become '0'.
但是,如果有任何 cppcheck 消息,这也会失败。您可能需要将enable
开关调整为您感兴趣的严重性等级。或者,您可以抑制消息,请参阅 cppcheck 命令行文档如何实现。
【讨论】:
以上是关于Cppcheck Cmake 集成:基于警告中止构建的主要内容,如果未能解决你的问题,请参考以下文章