使用 RecursiveASTVisitor 解析系统 headers 时出错

Error when parsing system headers with RecursiveASTVisitor

我正在使用 libtooling 构建一个独立的工具。我有 FrontendActionConsumerVisitor 的基本样板代码。访问者只访问 ClassTemplateSpecializationDecl 我只是保存了一些信息。一切正常,但是如果我在我正在解析的文件中 #include <string> 我得到一个错误:'stddef.h' file not found.

我以为编译器找不到某个系统 headers 但我正在解析的输入文件使用 clang++ 命令编译时没有任何错误。

这是基于 libTooling 的工具的一个非常典型的错误:https://clang.llvm.org/docs/FAQ.html#id3

Some header files (stddef.h, stdarg.h, and others) are shipped with Clang — these are called builtin includes. Clang searches for them in a directory relative to the location of the clang binary. If you moved the clang binary, you need to move the builtin headers, too.

如果你使用CMake你可以添加下面的代码来安装Clang的headers:

set(CLANG_BUILTIN_HEADERS_DIR "${LLVM_LIBRARY_DIR}/clang")

install(
  DIRECTORY ${CLANG_BUILTIN_HEADERS_DIR}
  DESTINATION lib
  FILES_MATCHING PATTERN "*.h"
  )