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)