首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake中的Cppcheck支持

CMake中的Cppcheck支持
EN

Stack Overflow用户
提问于 2018-02-05 23:06:54
回答 1查看 16.1K关注 0票数 20

我不是在问以这样或那样的方式支持Cppcheck的各种可用的第三方模块。

在CMake 3.10中,CMake似乎获得了一些官方的Cppcheck支持。参见CMAKE__CPPCHECK

不幸的是,关于如何使用这个变量的文档有点稀疏。有没有一个很好的例子说明Cppcheck应该如何与CMake 3.10 (或更高版本)一起使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-06 03:47:17

simple example将-如果您的PATH中有cppcheck,并且您没有指定其他参数-通过设置全局CMAKE__CPPCHECK变量如下:

代码语言:javascript
复制
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系统上的gcccppcheck ):

代码语言:javascript
复制
# 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命令行设置CMAKE_CXX_CPPCHECK变量:

代码语言:javascript
复制
# cmake -DCMAKE_CXX_CPPCHECK:FILEPATH=cppcheck ..

一个更“日常生活”的示例可能会让您在CMakeList.txt中包含类似以下代码片段的内容

代码语言:javascript
复制
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>CCXX时,才支持此属性。

cppcheck静态分析工具指定一个包含命令行的;-list。Makefile生成器和忍者生成器将与编译器一起运行cppcheck,并报告任何问题。

如果在创建目标时设置了CMAKE_<LANG>_CPPCHECK变量,则此属性由该变量的值初始化。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48625499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档