我是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。答案 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作为后端。