cmake - 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 .
有没有更好的办法?
解决方案
我主要像所描述的问题那样做 - 只有在设置了特定变量时才运行代码分析。我通常在我的顶层遵循这样的模式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 ..
在生成构建系统时执行。
推荐阅读
- rust - 跨多个特征借用数据时如何编写适当的通用函数签名
- python - 使用回调将 Python 对象传递给 C 时如何避免内存泄漏?
- google-apps-script - 范围选择并在该选择中复制固定值(来自单元格)
- java - 试图找到翻转数字的模式
- wagtail - 如何在 Django (Wagtail) 中使用 highlight.js?
- scala - 在databricks中使用scala将sql查询的结果写入数据帧失败
- node.js - MongoDB中是否有类似SQLs Decimal的东西?
- c# - 我需要帮助!如何在我发出命令后从文本文件中触发 wav 文件?(示例)
- spring - 如何处理 Spring Webflux 中的“池连接观察到错误”?
- c - 一个数组使用 C 指针将数据复制到其他 2 个数组