1. 程式人生 > >win10下,原始碼編譯Clang/llvm.並在vscode用cmake管理專案

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快取,再編譯應該就成功了。 

 

最後,可以發揮你的想象力,盡情的發明一個新語言吧