我不是要问各种可用的第三方模块以某种方式支持Cppcheck。
在CMake 3.9中,CMake似乎获得了一些官方的Cppcheck支持。请参阅CMAKE_ <LANG> _CPPCHECK。
不幸的是,如何使用这个变量的文档有点稀疏。是否有一个很好的例子说明Cppcheck应该如何与CMake 3.9(或更高版本)一起使用?
发布于 2018-10-30 14:31:28
一个简单的例子是 - 如果你有cppcheck
你的PATH
并且你没有指定其他参数 - 以下通过设置全局CMAKE_<LANG>_CPPCHECK
变量:
cmake_minimum_required(VERSION 3.10)
project(CppCheckTest)
file(
WRITE "main.cpp"
[=[
int main()
{
char a[10];
a[10] = 0;
return 0;
}
]=]
)
set(CMAKE_CXX_CPPCHECK "cppcheck")
add_executable(${PROJECT_NAME} "main.cpp")
要扫描的文件会自动添加到cppcheck
命令行。所以上面的示例中给出以下输出(gcc
和cppcheck
Linux系统上):
# make
Scanning dependencies of target CppCheckTest
[ 50%] Building CXX object CMakeFiles/CppCheckTest.dir/main.cpp.o
Checking .../CppCheckTest/main.cpp...
Warning: cppcheck reported diagnostics:
[/mnt/c/temp/StackOverflow/CppCheckTest/main.cpp:4]: (error) Array 'a[10]' accessed at index 10, which is out of bounds.
[100%] Linking CXX executable CppCheckTest
[100%] Built target CppCheckTest
您可以通过命令行cppcheck
设置CMAKE_CXX_CPPCHECK
变量来尝试现有项目cmake
:
# cmake -DCMAKE_CXX_CPPCHECK:FILEPATH=cppcheck ..
更多“日常生活”示例可能会让您在以下内容中包含类似以下代码段的内容CMakeList.txt
:
find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
if (CMAKE_CXX_CPPCHECK)
list(
APPEND CMAKE_CXX_CPPCHECK
"--enable=warning"
"--inconclusive"
"--force"
"--inline-suppr"
"--suppressions-list=${CMAKE_SOURCE_DIR}/CppCheckSuppressions.txt"
)
endif()
参考
<LANG>_CPPCHECK
目标财产
当此属性只支持<LANG>
是C
或CXX
。
指定包含cppcheck
静态分析工具命令行的-list 。Makefile Generators和Ninja生成器将cppcheck
与编译器一起运行并报告任何问题。
CMAKE_<LANG>_CPPCHECK
如果在创建目标时设置了该属性,则该属性由变量的值初始化。
https://stackoverflow.com/questions/-100005105
复制相似问题