我正在使用libtooling构建一个独立的工具。我有一个FrontendAction
,Consumer
和Visitor
的基本样板代码。访客仅访问ClassTemplateSpecializationDecl
,我只是在其中保存一些信息。一切正常,但是如果我#include <string>
正在解析文件,则会收到错误:'stddef.h' file not found
。
我以为编译器找不到一些系统头文件,但是我正在解析的输入文件可以使用clang ++命令进行编译而不会出现任何错误。
答案 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"
)