叮叮当当找不到我的头文件
Clang-Tidy can't find my header files
这里是clang和clang整洁的新手。
我有一个这样结构的项目:
project/
- build/
- cmake/
- component1/
- src/
- someFile.cpp
- someFile2.cpp
- someFile.hpp
- someFile2.hpp
- component2/
- etc...
-
当我使用clang-time通过以下命令浏览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"
我告诉clang整洁使用普通编译器includes来搜索它们,但它们必须在双破折号(--(之后引入。我也花了一段时间才发现它,因为它不包括在--help
:中
clang-tidy -checks='...' <source0> ... -- -Iblabla/ ...
再次阅读选项,你可以尝试-extra-arg=
参数,但我使用双破折号近似,因为它允许我将所有选项放在一个文件中,以使clang和clang整洁,而对两者的处理只需$(cat $file)
。
发件人:https://clang.llvm.org/extra/clang-tidy/#using-叮当作响整齐的
clang-time是一个基于LibTooling的工具。您也可以在--之后的命令行上指定编译选项
只有当您使用CMake来管理项目时,这个答案才会对您有所帮助。
CMake可以选择创建一个.json文件,该文件包含所有带有命令行选项的编译器调用。这个文件可以通过以下选项进行整理:
-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
变量以使用CMake生成.json文件,然后将CMake输出目录传递给clang-time。Clang-time将从.json文件中的命令中获取include路径。
在CMake中也有同样的问题。在我的案例中,问题是Clang Tidy无法通过响应文件处理include目录——至少在版本10中是这样。
停用它们解决了问题:
# Disable response files
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES Off)
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的程序没有从文件中读取并输入数据
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 为什么当我输入较大的数字时,我的程序会到达文件末尾?
- CMake:在其他目录中找不到我的头文件
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 我的文件无法正常工作,无法从C++文件中读取上下文
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 我的头文件 DNode 中的我的数据类型未被识别为数据类型
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 如何在我的 Visual C++ 项目中使用 .a 文件
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 如何将我的程序添加到文件和文件夹的macOS右键单击菜单?
- 如何自动获取我的项目的路径并删除一些文件
- :-1: 错误: LNK1104: 无法打开文件"我的项目.obj"
- C++创建进程 - 系统错误#2找不到文件 - 我的文件路径有什么问题?