win10下,源码编译Clang/llvm.并在vscode用cmake管理项目

走了不少弯路。网上的资料很多都过时了,我今天(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缓存,再编译应该就成功了。 

最后,可以发挥你的想象力,尽情的发明一个新语言吧

猜你喜欢

转载自www.cnblogs.com/rootcn/p/9941253.html