c++ - cmake + clang_tidy - 禁用 checkin 目录

标签 c++ cmake clang-tidy

我有一个使用 CMake 的大型项目。我想使用以下代码添加 clang_tidy-8 支持:

set(BORG_CLANG_TIDY OFF CACHE STRING "If enabled, clang-tidy will be used. If set to 'fix', fixes will be done on source")
set_property(CACHE BORG_CLANG_TIDY PROPERTY STRINGS ON OFF fix)
if(BORG_CLANG_TIDY)
    if (BORG_CLANG_TIDY STREQUAL "fix")
        set(maybe_fix -fix)
    endif()

    set(CMAKE_CXX_CLANG_TIDY clang-tidy-8 -extra-arg=-Wno-unknown-warning-option -format-style=file ${maybe_fix} )
endif()

我将正确的 .clang-tidy 放在项目的根目录中(正确 = 带有所需的检查)。但是,有些目录我不想让 clang tidy 检查/修复(第 3 方和遗留代码无法修改,因为它很脆弱)。所以我尝试将空的 .clang-tidy 文件放在这些目录中(empty = with -checks=-*)。这不起作用,因为 Error: no checks enabled.

我希望找到一些假的 -checks=-*,hello-world-do-nothing-check 但什么也没有出现。

是否有其他方法可以禁用对选定子目录 (/subtrees) 的检查?这些目录是静态的,如果需要可以在 CMake 中进行硬编码。

最佳答案

如果你想要一个什么都不做的虚拟检查,至少有一个很容易通过它的选项禁用:misc-definitions-in-headers

HeaderFileExtensions 选项可用于使检查仅适用于某些头文件后缀。如果您将它设置为不存在的行“x”,那么您有一个 hello-world-do-nothing-check 替代方案。你的 clang-tidy 文件看起来像这样:

Checks: '-*,misc-definitions-in-headers'
CheckOptions:
  - { key: HeaderFileExtensions,          value: "x" }

您还可以检查https://stackoverflow.com/a/56319752/9874699并尝试调整 line-filter 以过滤掉某些目录中的文件。

关于c++ - cmake + clang_tidy - 禁用 checkin 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58338202/

相关文章:

c++ - 如果用户在没有输入的情况下点击 Enter,则无法找到产生错误的方法

c# - 困惑: instance creation of c# class in c++

c++ - 局部变量模板的实例化

module - cmake : include FindPackageHandleStandardArgs. cmake

c++ - CMAKE_CXX_CLANG_TIDY : avoid clang-diagnostic-error interrupting build

c++ - 忽略 clang-tidy 中的系统头文件

c++ - 为什么这个 Boost Spirit 示例没有编译?

linux - 使用 Visual Studio 2017 和 CMake 以 Linux 为目标

c++ - CMake : several projects using custom target to make test

clang-tidy - 将子选项设置为 clang-tidy