Clang-Tidy не может найти мои заголовочные файлы

Новичок лязгать и лязгать здесь.

У меня есть проект с такой структурой: project/ - build/ - cmake/ - component1/ - src/ - someFile.cpp - someFile2.cpp - someFile.hpp - someFile2.hpp - component2/ - etc... -

Когда я использую clang-tidy, чтобы просмотреть все файлы в project/component1/ с помощью этой команды: clang-tidy project/component1/src/* -checks=-*,clang-analyzer-*,-clang-analyzer-alpha*

В итоге выдается ошибка вроде этого: $HOME/project/component1/src/someFile.cpp:18:10: error: 'project/component1/someFile.hpp' file not found [clang-diagnostic-error] \#include "component1/someFile.hpp"

3 ответа

Я говорю clang-tidy искать их с использованием простых включений компилятора, но они должны быть введены после двойного тире (-). Мне также потребовалось время, чтобы обнаружить это, так как он не включен в--help:

clang-tidy -checks='...' <source0> ... -- -Iblabla/ ...

Прочитав еще раз варианты, вы можете попробовать -extra-arg= параметр, но я использую подход с двойным тире, поскольку он позволяет мне поместить все параметры, чтобы дать clang и clang-tidy в одном файле, с не более чем обработкой $(cat $file) для обоих.


От: https://clang.llvm.org/extra/clang-tidy/

clang-tidy - это инструмент на основе LibTooling. Вы также можете указать параметры компиляции в командной строке после -

Этот ответ поможет вам, только если вы используете CMake для управления своим проектом.

CMake имеет опцию для создания файла.json, который содержит все вызовы компилятора с параметрами командной строки. Этот файл может быть передан clang-tidy с опцией:

-p <build-path> is used to read a compile command database.

    For example, it can be a CMake build directory in which a file named
    compile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
    CMake option to get this output). When no build path is specified,
    a search for compile_commands.json will be attempted through all
    parent paths of the first input file . See:
    http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html for an
    example of setting up Clang Tooling on a source tree.

Как указано в документации, вы должны установить CMAKE_EXPORT_COMPILE_COMMANDS переменная для создания файла.json с CMake, а затем передать выходной каталог CMake в clang-tidy. Clang-tidy получит включаемые пути из команд в файле.json.

Была такая же проблема в CMake. В моем случае проблема заключалась в том, что Clang-Tidy не мог обрабатывать подключаемые каталоги через файлы ответов - по крайней мере, в версии 10.

Деактивация их решила:

      # Disable response files
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES Off)
Другие вопросы по тегам