c++ - CMake 调用时出现 clang-tidy 重复错误

标签 c++ cmake clang-tidy

我对 clang-tidy 有疑问。基本上,它会分析我的每个项目文件,但对于包含在多个 .cpp 文件中的 header ,它会打印冗余错误。

问题是,Visual Studio Code 有它的 PROBLEMS 选项卡,它会挑选每一个问题,所以对于文件 definitions.hpp ,它包含在 3 个单独的.cpp 文件我最终得到这样的东西:

enter image description here

控制台输出为:

[build] [3/4  25% :: 14.699] Building CXX object CMakeFiles\solver.dir\src\definitions.cpp.obj
[build] [...]\build\..\src/definitions.hpp:1:9: warning: header guard does not follow preferred style [llvm-header-guard]
[build] #ifndef DEFINITIONS_HPP
[build]         ^~~~~~~~~~~~~~~
[...]
[build] [3/4  50% :: 16.138] Building CXX object CMakeFiles\solver.dir\src\genetic_algorithm.cpp.obj
[build] [...]\build\..\src/definitions.hpp:1:9: warning: header guard does not follow preferred style [llvm-header-guard]
[build] #ifndef DEFINITIONS_HPP
[build]         ^~~~~~~~~~~~~~~
[...]
[build] [3/4  75% :: 17.362] Building CXX object CMakeFiles\solver.dir\src\main.cpp.obj
[build] [...]\build\..\src/definitions.hpp:1:9: warning: header guard does not follow preferred style [llvm-header-guard]
[build] #ifndef DEFINITIONS_HPP
[build]         ^~~~~~~~~~~~~~~

那么,有没有什么办法可以防止这样的事情发生呢?我的意思是它是我的错误列表的两倍。

@编辑

所以这是我的 clang-tidy - CMakeLists.txt 的相关部分:

if(CMAKE_VERSION VERSION_GREATER 3.6)
    option(CLANG_TIDY_FIX "Perform fixes for Clang-Tidy" OFF)
    find_program(
        CLANG_TIDY_EXE
        NAMES "clang-tidy"
        DOC "Path to clang-tidy executable"
    )

    if(CLANG_TIDY_EXE)
        if(CLANG_TIDY_FIX)
            set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE}" "-fix")
        else()
            message("SETTING UP CLANG TIDY")
            set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE}")
        endif()
    endif()
endif()

这是我的 .clang-tidy 文件:

---
Checks:          '*'
HeaderFilterRegex: '.*'
AnalyzeTemporaryDtors: false
FormatStyle:     none
...

最佳答案

这可能是 Visual Studio Code 如何实现其对 clang-tidy 的支持的问题。

Clang-tidy 自身供应 run-clang-tidy.py对编译数据库中的所有文件运行 clang-tidy 的脚本文件。它还可以防止在代码的相同位置多次应用修复。

您的选择是:

  • 修复代码,不发出警告
  • 使用//NOLINT//NOLINTNEXTLINE 来抑制这些警告

编辑: 在讨论之后,这在我看来就像是 cmake 如何调用 clang-tidy 的问题——它在每个目标上单独运行,而 clang-tidy 无法知道它之前报告了一些错误。您应该只使用 CMake 生成 compile_commands.json 然后通过 run-clang-tidy.py 运行 clang-tidy .

This article似乎证实了我对与 CMake 的 clang-tidy 集成的怀疑。

关于c++ - CMake 调用时出现 clang-tidy 重复错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55822272/

相关文章:

C++不完整的类型和转换错误

c++ - 什么可能导致无限循环错误

c++ - 一个奇怪的c++代码现象

cmake - 如何在 Windows 10 上安装适用于 Fortran 的 LAPACK

c++ - CMake:如何为测试子目录项目重用目标文件?

c++ - 类构造函数中的模板和使用(#define)

python - Cmake - 使用 OpenCV 生成共享库

clang-tidy - 在 clang-tidy 配置中没有 `-line-filter` 等价物?

c - 禁用 clang-tidy 诊断

c++ - 我怎样才能告诉 clang-tidy 检查 pragma 一次而不是 llvm 风格的标题守卫?