走了不少弯路。网上的资料很多都过时了,我今天(2018.11.11)搞了一天,终于成功的再vscode中只按下鼠标就编译出了一个llvm项目
第一步,下源码:
遵循https://clang.llvm.org/get_started.html的步骤下载源码,我只下了必须的llvm和clang.
llvm官方推荐用ninja编译,但我不信邪,用了vs2017编译,结果惨不忍睹,编程过程中遇到的错误非常多,不可能很快解决的。于是老老实实的用ninja。
ninja只是一个壳,内部也是用vc2017的工具链。所以vc2017先装好。社区版就可以。msbuild,window 10 kit。都要装好。按照官方指导,可以顺便编译clang和llvm.
编译完后,输出bin目录有30G,所以硬盘要有充足空间。
第二步。把编译好bin目录加入系统PATH。
第三步,使用vscode和vscode-cmake tools。
vscode装的扩展。c/c++(微软出的那个)和 cmake-tools(vector-of-bool是作者)
第四步:进入llvm中示例目录:llvm\examples\HowToUseJIT。右键打卡vscode.。CMake-tools 会自动配置项目。
当提示选择kit时,不要选vs2017,vs2015,gcc等。选择clang8.0 for msvc(截至到2018,11.11,8.0是最新版)。如果没有这个套件,则选最下面的unspcail.然后按ctrl+shit+p,输入cmake 选择 "scan kits"命令,让cmake-tools扩展,重新扫描本机工具链。
如果path设定好,那么clang应该就出现了。我再这里花了好长时间,CMake-tools我早就装好了,把bin加入path没找到kit,也不知道cmake scan kits命令。我都是在命令行,手动输入clang 加一连串的参数的。后来去看cmake-tools的官方,才知道的这个命令。
第五步:把原来的CMakeLists.txt删除或改名。新建一个CMakeLists.txt.输入以下内容:(网上的资料,大多都过时了或者有错误,下面这个可以成功编译)
cmake_minimum_required(VERSION 3.4.3)
project(llvm_test)
set(LLVM_TARGETS_TO_BUILD"x64")
set(LLVM_BUILD_RUNTIME OFF)
set(LLVM_BUILD_TOOLS OFF)
find_package(LLVM REQUIRED CONFIG)
message(STATUS"Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS"Using LLVMConfig.cmake in: ${LLVM_DIR}")
SET (CMAKE_CXX_COMPILER_ENV_VAR"clang++")
SET (CMAKE_CXX_FLAGS_MINSIZEREL"-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE"-O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO"-O2 -g")
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
file(GLOB_RECURSE source_files"${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
add_executable(llvm_test HowToUseJIT.cpp)#Find the libraries that correspond to the LLVM components#that we wish to use
llvm_map_components_to_libnames(llvm_libs
Core
ExecutionEngine
Interpreter
MC
Support
nativecodegen
irreader
)#Link against LLVM libraries
target_link_libraries(llvm_test ${llvm_libs})
然后按状态栏的build all就可以了。如果失败。按 ctrl+shit+p输入"CMake clean" 或"CMake delete cache build settings and reconfigure",清空一下cmake缓存,再编译应该就成功了。
最后,可以发挥你的想象力,尽情的发明一个新语言吧