我不是要问各种可用的第三方模块以某种方式支持Cppcheck。
使用CMake 3.10,CMake似乎获得了一些官方的Cppcheck支持。请参阅CMAKE_<LANG>_CPPCHECK。
不幸的是,如何使用这个变量的文档有点稀疏。是否有一个很好的例子说明Cppcheck应该如何与CMake 3.10(或更高版本)一起使用?
答案 0 :(得分:14)
如果您的cppcheck
中有PATH
并且您没有指定其他参数,则simple example将成为全局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
命令行。因此,上面的示例给出了以下输出(Linux系统上的gcc
和cppcheck
):
# 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
target property
仅当
<LANG>
为C
或CXX
时才支持此属性。指定一个; -list,其中包含
cppcheck
静态分析工具的命令行。 Makefile Generators和Ninja生成器将与编译器一起运行cppcheck
并报告任何问题。如果在创建目标时设置了
CMAKE_<LANG>_CPPCHECK
变量的值,则此属性将初始化。