整洁的冗余错误

时间:2019-04-24 04:06:44

标签: c++ cmake clang-tidy

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

问题是,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
...

1 个答案:

答案 0 :(得分:1)

这可能是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进行整洁集成的怀疑。