使用RecursiveASTVisitor解析系统标头时出错

时间:2019-03-23 15:34:15

标签: c++ clang++ libtooling

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

我以为编译器找不到一些系统头文件,但是我正在解析的输入文件可以使用clang ++命令进行编译而不会出现任何错误。

1 个答案:

答案 0 :(得分:1)

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

  

Clang附带了一些头文件(stddef.h,stdarg.h等),这些文件称为内置包含文件。 Clang在相对于Clang二进制文件的位置的目录中搜索它们。如果移动了clang二进制文件,则也需要移动内置标头。

如果使用 CMake ,则可以添加以下代码来安装Clang的标头:

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

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