在 C++ 项目中使用 clang 作为库

Using clang as a library in C++ project

我正在尝试将 clang 用作库,但我不确定如何 link Makefile 中的文件。

正在试用 ASTVisitor 代码:https://clang.llvm.org/docs/RAVFrontendAction.html

这是我的 Makefile 供参考:

CC=g++
Includes= /usr/lib/llvm-6.0/include/
Libs= /usr/lib/llvm-6.0/lib/
CLANGLIBS=-lclangTooling -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization -lclangCodeGen -lclangParse -lclangSema -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangAnalysis -lclangARCMigrate -lclangRewrite -lclangRewriteFrontend -lclangEdit -lclangAST -lclangLex -lclangBasic -lclang

run:
    LD_PRELOAD=../../llvm-project/build/lib/libclang.so ./clang_parser.out

all: clang_parser.cpp
    $(CC) -I$(Includes) -L$(Libs) clang_parser.cpp -o a.out $(CLANGLIBS)
clean:
    rm clang_parser.out

我已经将 clang 安装为库,即完成 sudo apt-get install libclang-dev

我收到以下错误:

clang_parser.cpp:13:10: fatal error: clang/Frontend/FrontendActions.h: No such file or directory
#include <clang/Frontend/FrontendActions.h>
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Makefile:10: recipe for target 'all' failed
make: *** [all] Error 1

在 C/C++ 项目中使用 apt 安装包的任何最佳实践也值得赞赏。

安装了一些软件包只是为了确保:

sudo apt-get install libclang-dev llvm clang clang-tools

这是供参考的编译命令(包含所有可能用到的库):

clang++ `llvm-config --cxxflags --ldflags` clang_parser.cpp $(CLANGLIBS2) `llvm-config --libs --system-libs` -g -o tool

其中

CLANGLIBS2=-lclangTooling -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization -lclangCodeGen -lclangParse -lclangSema -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangAnalysis -lclangARCMigrate -lclangRewrite -lclangRewriteFrontend -lclangEdit -lclangAST -lclangASTMatchers -lclangLex -lclangBasic -lclang

通过以下操作将 /usr/lib/llvm-6.0/lib 中的所有 .so、.a 文件设置为 LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/usr/lib/llvm-6.0/lib
ldconfig