我对clang-tidy
有疑问。基本上,它会分析我的每个项目文件,但是对于多个.cpp
文件中包含的标头,它会打印出冗余错误。
问题是,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
...
答案 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进行整洁集成的怀疑。