使用 RecursiveASTVisitor 解析系统 headers 时出错
Error when parsing system headers with RecursiveASTVisitor
我正在使用 libtooling 构建一个独立的工具。我有 FrontendAction
、Consumer
和 Visitor
的基本样板代码。访问者只访问 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"
)
我正在使用 libtooling 构建一个独立的工具。我有 FrontendAction
、Consumer
和 Visitor
的基本样板代码。访问者只访问 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"
)