clang-tidy повторяющиеся ошибки при вызове CMake

У меня проблема с 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]         ^~~~~~~~~~~~~~~

Итак, есть ли способ предотвратить подобное? Я имею в виду, что мой список ошибок в два раза больше.

@Редактировать

Итак, это моя часть CMakeLists.txt, относящаяся к clang-tidy:

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
...

person dabljues    schedule 24.04.2019    source источник


Ответы (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, а затем запускать clang-tidy через run-clang-tidy.py.

Эта статья, похоже, подтверждает мои подозрения относительно беспроблемной интеграции с CMake .

person pablo285    schedule 24.04.2019
comment
Проблема в том, что я хочу их. Нет ли способа заставить clang-tidy проверять, была ли ошибка для определенного заголовка распечатана раньше, и если да, не печатать ошибку снова? Я думаю, vscode будет работать нормально, проблема в том, что это происходит 3 раза в терминале - person dabljues; 24.04.2019
comment
Я думаю, что это проблема вызова clang-tidy с помощью VS Code Clang-tidy Linter (я предполагаю, что это то, что вы используете), поэтому вы можете отправить это как отчет об ошибке на их github. - person pablo285; 24.04.2019
comment
К сожалению нет. Я вызываю его в своей сборке в CMakeLists.txt - person dabljues; 24.04.2019
comment
Хорошо, тогда это может быть проблема в том, как вы его вызываете, вы должны добавить эту информацию в свой вопрос. - person pablo285; 24.04.2019
comment
Я добавил свою конфигурацию CMake clang-tidy - person dabljues; 24.04.2019
comment
Отредактировал свой ответ соответствующим образом - person pablo285; 26.04.2019