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

时间:2015-05-14 07:41:28

标签: c++ linux makefile clang llvm

我是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;

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

clang++ -o PrintFunctions PrintFunctions.cpp

我收到错误:

  

致命错误:找不到'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。

1 个答案:

答案 0 :(得分:6)

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

CXXFLAGS += `${LLVM_DIR}/bin/llvm-config --cxxflags`

LDFLAGS += `${LLVM_DIR}/bin/llvm-config --ldflags`
LLVMLIBS = `${LLVM_DIR}/bin/llvm-config --libs`

[托马斯评论]

您可能还会使用:

LLVMLIBS += `${LLVM_DIR}/bin/llvm-config --system-libs`

对于不属于LLVM但LLVM依赖的东西。

[结束编辑]

然后使用这些:

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

myprog: ${OBJECTS}
    ${LD} ${LDFLAGS} -o $@ ${OBJECTS} ${LIBS}

(其中${OBJECTS}是您的目标文件列表)

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

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