使用配置文件禁用或启用cppcheck警告

7
使用clang-tidy静态分析器,我可以在项目根目录下保留一个文件(.clang-tidy),其中包含我想要激活或关闭的警告信息。
据我所知,clang-tidy会查找该文件并使用在其中定义的选项。这样可以避免在CMake或Makefiles中硬编码冗长的命令行。 是否有可能使用cppcheck静态分析器做到同样的效果? 目前,我已经将这个非常长的命令行硬编码了。
cppcheck --max-ctu-depth=3 --enable=all --inline-suppr --suppress=*:*thrust/complex* --suppress=missingInclude --suppress=syntaxError --suppress=unmatchedSuppression --suppress=preprocessorErrorDirective --language=c++ --std=c++14 --error-exitcode=666

这是我在一个工程的根目录下保存的 .clang-tidy 配置文件的示例:

---
Checks: '
    *,
    -readability-magic-numbers,
    -modernize-use-nodiscard,
    -altera-struct-pack-align,
    -cert-err58-cpp,
    -cppcoreguidelines-avoid-non-const-global-variables,
    -cppcoreguidelines-macro-usage,
    -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
    -cppcoreguidelines-pro-type-vararg,
    -cppcoreguidelines-avoid-magic-numbers,
    -fuchsia-default-arguments-calls,
    -fuchsia-trailing-return,
    -fuchsia-statically-constructed-objects,
    -fuchsia-overloaded-operator,
    -hicpp-vararg,
    -hicpp-no-array-decay,
    -llvm-header-guard,
    -llvmlibc-restrict-system-libc-headers,
    -llvmlibc-implementation-in-namespace,
    -llvmlibc-callee-namespace
'
WarningsAsErrors: '*'
HeaderFilterRegex: '.'
AnalyzeTemporaryDtors: false
FormatStyle: file
...
2个回答

3
您可以将配置存储在*.cppcheck文件中,然后使用--project命令行选项运行检查。请参见手册 - Cppcheck GUI项目部分。 cppcheck文件通常由CppCheckGUI通过File -> New project file生成。确切的语法未记录,它基本上只是一个XML文件,如果您想直接创建文件而不使用GUI,则看起来相当简单。
示例test.cppcheck文件:
<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
    <builddir>test2-cppcheck-build-dir</builddir>
    <platform>Unspecified</platform>
    <analyze-all-vs-configs>false</analyze-all-vs-configs>
    <check-headers>true</check-headers>
    <check-unused-templates>false</check-unused-templates>
    <max-ctu-depth>10</max-ctu-depth>
    <exclude>
        <path name="WINDOWS/"/>
    </exclude>
    <suppressions>
        <suppression>IOWithoutPositioning</suppression>
    </suppressions>
</project>

我尝试从 GUI 生成 XML,但我甚至无法在 GUI 中选择异常以将其存储在 XML 中。你有一个示例 XML 文件吗? - alfC
1
添加了一个示例。您可以通过转到文件 - 编辑项目文件来通过 GUI 添加编辑 .cppcheck 文件。 - pablo285
1
格式在此处定义:https://cppcheck.sourceforge.io/manual.pdf。XML只是两种可能格式之一。 - wheredidthatnamecomefrom
2
我正在使用这些选项 cppcheck --enable=all --suppress=missingIncludeSystem --inline-suppr --std=c++17 --check-config --error-exitcode=1。如果能知道如何将它们放入XML或文本配置文件中就太好了。到目前为止,我无法将任何这些选项放入配置文件中,它们都被忽略了。 - alfC

1

我认为最简单的方法是通过--suppressions-list=<file>选项。

例如,编写以下.suppress.cppcheck文件:

IOWithoutPositioning
MissingInclude
...

并在您的cppcheck命令行中添加--suppressions-list=./.suppress.cppcheck


我想知道为什么我之前没看到这个选项。--suppressions-list 应该有一个默认值。 - alfC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接