首页 > 解决方案 > CMAKE 有条件地运行 cppcheck

问题描述

我有一个 CMakefile,它定义了 cppcheck,如 CMake 中的 Cppcheck 支持中所述, 效果很好,但我希望能够一遍又一遍地编译我的代码,并且在我认为我快完成之前不运行 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 . 

有没有更好的办法?

标签: cmakeconditional-compilationcppcheck

解决方案


我主要像所描述的问题那样做 - 只有在设置了特定变量时才运行代码分析。我通常在我的顶层遵循这样的模式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启用cppcheckclang-tidy

我默认不进行代码分析,因为代码分析往往很慢。但是可以通过cmake -G "my generator" -DENABLE_CODE_ANALYSIS=ON ..在生成构建系统时执行。


推荐阅读