相比codeblocks简单一些。仍然使用Cmake这个工具。如果没有把python加入环境变量,把python26.exepython26.dll python26.zip拷贝到(源文件目录)\utils\llvm-build下(python 2.X应该都可以)
设置好source code path 和输出的VS工程的路径在whereto build the binaries
在下面的编译选项里添加一项
PYTHON_EXECUTABLE,值为C:\Users\user\Desktop\FFF\llvm-3.4.2.src\utils\llvm-build\python26.exe
之前codeblocks需要设置C/C++的编译器路径,这里我们就不需要了,cmake一会自动帮我们填好(可能因为VS把自己的路径注册到了系统里)
点configure然后generate,得到VS的工程。。。。。超级巨大
接下来制作一个Lib文件,把LLVM的主要功能放在里面,节约以后编译的时间
打开得到的sln文件,VS把整个LLVM源码加载,其中有几十个子工程,但是我们只需要其中的几个。找到
LLVMCore
LLVMCodeGen
LLVMExecutionEngine
LLVMTarget
LLVMJIT
LLVMScalarOpts
LLVMSupport
LLVMAnalysis
LLVMMC
LLVMX86AsmParser
LLVMX86AsmPrinter
LLVMX86Desc
LLVMX86Info
LLVMX86Utils
LLVMX86CodeGen
LLVMSelectionDAG
LLVMObject
LLVMTransformUtils
LLVMBitWriter
LLVMBitReader
LLVMMCJIT
LLVMRuntimeDyld
LLVMAsmPrinter
LLVMAsmParser
LLVMMCParser
在工程上右键,生成,在VS解决方案目录/lib/Debug文件夹里可以看到编译好的lib文件
最后合并之。新建一个VS静态库工程,工程上右键,属性,库管理器,常规,附加依赖项填上面这些工程生成的lib文件路径,附加库目录填(VS解决方案目录)/lib/Debug
这样编译,可以生成一个200多M的Lib文件,是LLVM的核心功能,包含了一下这些头文件的所有依赖的类和函数
#include "llvm/Analysis/Passes.h"
#include "llvm/Analysis/Verifier.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/JIT.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/PassManager.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Transforms/Scalar.h"
使用时include头文件,并且添加刚编译的大lib文件即可。不用担心使用200多M的lib生成的exe会太大,编译时只会把有关的obj添加进来
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMCore.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMCodeGen.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMExecutionEngine.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMTarget.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMJIT.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMScalarOpts.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMSupport.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMAnalysis.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMMC.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMX86AsmParser.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMX86AsmPrinter.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMX86Desc.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMX86Info.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMX86Utils.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMX86CodeGen.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMSelectionDAG.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMObject.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMTransformUtils.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMBitWriter.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMBitReader.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMAsmPrinter.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMAsmParser.lib
C:\Users\user\Desktop\FFF\llvm-3.4.2.src\build3\lib\Debug\LLVMMCParser.lib