我有一个CMakefile,它定义了cppcheck,如 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 .
有更好的方法吗?
答案 0 :(得分: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 ..
来启用它。