如何使用clang/LLVM库编译C++代码?

use*_*587 2 c++ linux makefile llvm clang

我是Linux的新手,并且正在学习一些clang教程.但是,我发现即使是一个简单的文件也很难编译.所以,这是代码的一部分:

#include <cstdio>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <utility>
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Parse/ParseAST.h"
#include "clang/Rewrite/Core/Rewriter.h"
#include "clang/Rewrite/Frontend/Rewriters.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/raw_ostream.h"

using namespace clang;
using namespace std;
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下命令编译简单代码(比如说PrintFunctions.cpp)时:

clang++ -o PrintFunctions PrintFunctions.cpp
Run Code Online (Sandbox Code Playgroud)

我收到错误:

致命错误:找不到'clang/AST/ASTConsumer.h'文件

好吧,我已经检查过我的LLVM和clang已经安装好了,文件'clang/AST/ASTConsumer.h'是在

/usr/lib/llvm-3.4/include/clang/AST

所以,必须有一些我错过的命令.我不知道该怎么做......我已经在线阅读了一些教程,其中大多数使用了makefile,它们看起来很复杂.那么,如何编译呢?如何找到一种更简单的方法来编写makefile?

顺便说一下,我在Ubuntu 14.04下,而clang/LLVM版本是3.4.

Mat*_*son 6

通常,在makefile中,您应该具有以下内容:

CXXFLAGS += `${LLVM_DIR}/bin/llvm-config --cxxflags`
Run Code Online (Sandbox Code Playgroud)

LDFLAGS += `${LLVM_DIR}/bin/llvm-config --ldflags`
LLVMLIBS = `${LLVM_DIR}/bin/llvm-config --libs`
Run Code Online (Sandbox Code Playgroud)

[根据托马斯的评论编辑]

您可能还会使用:

LLVMLIBS += `${LLVM_DIR}/bin/llvm-config --system-libs`
Run Code Online (Sandbox Code Playgroud)

对于那些不属于LLVM但LLVM依赖的东西.

[结束编辑]

然后使用这些:

.cpp.o: 
    ${CXX} ${CXXFLAGS} ${CXX_EXTRA} -c -o $@ $<

myprog: ${OBJECTS}
    ${LD} ${LDFLAGS} -o $@ ${OBJECTS} ${LIBS}
Run Code Online (Sandbox Code Playgroud)

(${OBJECTS}目标文件列表在哪里)

LLVM_DIR当然应该设置为指向安装LLVM的位置,例如,/usr/或者/usr/local- 运行which clang++以查看clang安装的位置.

这是我的Pascal编译器的Makefile,使用LLVM作为后端.