CMAKE 有条件地运行 cppcheck
Posted
技术标签:
【中文标题】CMAKE 有条件地运行 cppcheck【英文标题】:CMAKE conditionally run cppcheck 【发布时间】:2019-07-09 16:42:16 【问题描述】:我有一个定义 cppcheck 的 CMakefile,如 Cppcheck support in CMake 效果很好,但我希望能够一遍又一遍地编译我的代码,并且在我认为我快完成之前不运行 cppcheck,然后在提交之前运行 cppcheck。
cppcheck 太慢,无法作为我的编辑/编译/测试/调试周期的一部分。
这方面的最佳做法是什么?我正在考虑定义一个变量并生成文件,然后构建和构建。 例如
在 CMakeLists.txt 中
if(CPPCHECK STREQUAL "yes")
set(CMAKE_CXX_CPPCHECK "cppcheck")
endif()
在编写代码时
cmake3 -G "Unix Makefiles" ..
cmake3 --build .
cmake3 --build .
然后在提交代码之前
cmake3 -G "Unix Makefiles" -DCPPCHECK=yes ..
cmake3 --build .
有没有更好的办法?
【问题讨论】:
使用add_custom_target
创建一个自定义目标,并随时使用make yourtarget
运行它。
【参考方案1】:
我主要按照所描述的问题进行操作 - 仅在设置了特定变量时才运行代码分析。我通常在我的***CMakeLists.txt
中遵循这样的模式:
option(ENABLE_CODE_ANALYSIS "Run code analysis" OFF)
message(STATUS "ENABLE_CODE_ANALYSIS $ENABLE_CODE_ANALYSIS")
if(ENABLE_CODE_ANALYSIS)
find_program(cppcheck cppcheck)
message(STATUS "cppcheck $cppcheck")
if(NOT (cppcheck MATCHES "NOTFOUND"))
# Notes:
# - unmatchedSuppression needed since not all source files are
# analyzed simultaneously
# - unusedFunction needed since not all source files are
# analyzed simultaneously
# - template needed to force "warning" into output string, and
# to make the 'id' available for suppression
set(CMAKE_CXX_CPPCHECK "$cppcheck"
"--enable=all"
"--inconclusive"
"--inline-suppr"
"--quiet"
"--suppress=unmatchedSuppression"
"--suppress=unusedFunction"
"--template='file:line: warning: id (severity): message'")
endif()
endif(ENABLE_CODE_ANALYSIS)
通常我会对clang-tidy
执行相同的操作,并让ENABLE_CODE_ANALYSIS
同时启用cppcheck
和clang-tidy
。
我默认不进行代码分析,因为代码分析往往很慢。但是可以在生成构建系统的时候通过cmake -G "my generator" -DENABLE_CODE_ANALYSIS=ON ..
开启。
【讨论】:
以上是关于CMAKE 有条件地运行 cppcheck的主要内容,如果未能解决你的问题,请参考以下文章