我对 clang-tidy
有疑问。基本上,它会分析我的每个项目文件,但对于包含在多个 .cpp
文件中的 header ,它会打印冗余错误。
问题是,Visual Studio Code 有它的 PROBLEMS
选项卡,它会挑选每一个问题,所以对于文件 definitions.hpp
,它包含在 3 个单独的.cpp
文件我最终得到这样的东西:
控制台输出为:
[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/