叮叮当当找不到我的头文件

Clang-Tidy can't find my header files

本文关键字:文件 我的 找不到 叮叮当当      更新时间:2023-10-16

这里是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)
相关文章: