開發Clang LibTooling工具的三種方式

編譯LLVM原始碼

下載LLVM原始碼

https://github。com/llvm/llvm-project/releases

開發Clang LibTooling工具的三種方式

LLVM14。0。6

解壓到本地

開發Clang LibTooling工具的三種方式

建立build1406目錄

開發Clang LibTooling工具的三種方式

編譯

cmake -S llvm1406\llvm -B build1406 -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=X86 -Thost=x64 -DCPACK_GENERATOR=ZIP -DLLVM_INCLUDE_TESTS=OFFcmake ——build build1406 ——config Release ——target package

LLVM ENABLE PROJECTS:

這是一個要構建的專案列表,由分號分隔。專案的原始碼必 須與 llvm 目錄在同一級別 (並排佈局)。當前列表是 clang, clangtools-extra, compiler-rt, debuginfo-tests, lib, libclc, libcxx, libcxxabi, libunwind, lld, lldb, llgo, mlir, openmp, parallel-libs, polly 和 pstl。All 可以作為此列表中的所有專案的簡寫。要和 LLVM 一起構建 Clang 和 llgo, 必須指定-DLLVM ENABLE PROJECT=“clang;llgo”。

LLVM TARGETS TO BUILD

: LLVM 支援不同的 CPU 架構。預設情況下,構建所有目標。 使用此變數指定要構建的目標列表,由分號分隔。目前支援的目標有 AArch64、AMDGPU、 ARM、BPF、Hexagon、Lanai、Mips、MSP430、NVPTX、PowerPC、RISCV、Sparc、SystemZ、 WebAssembly、X86、XCore。All 可以作為 All 目標的簡寫,並且名稱區分大小寫。若要只啟用 PowerPC 和 X86目標,必須指定-DLLVM TARGETS To BUILD=“PowerPC;X86”。

編譯LLVM支援的CMake選項:

https://llvm。org/docs/CMake。html

編譯後打包的庫和標頭檔案

開啟build\LLVM-14。0。6-win64。zip解壓到外層目錄

開發Clang LibTooling工具的三種方式

開發Clang LibTooling工具方法1

基於build1406\tools\clang\tools\clang-check開發,這種方法最快、最簡單。

開發Clang LibTooling工具的三種方式

開發Clang LibTooling工具方法2

複製llvm1406\clang\tools\clang-check一份改名為clang-check-my,並修改下圖中的CMakeLists。txt檔案

開發Clang LibTooling工具的三種方式

開發Clang LibTooling工具的三種方式

重新執行下

cmake -S llvm1406\llvm -B build1406 -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=X86 -Thost=x64 -DCPACK_GENERATOR=ZIP -DLLVM_INCLUDE_TESTS=OFF

開發Clang LibTooling工具的三種方式

開發Clang LibTooling工具方法3

使用LLVM編譯產物LLVM-14。0。6-win64,在CMakeLists。txt中使用

參考專案1:

find_package(LLVM REQUIRED CONFIG)

find_package(Clang REQUIRED CONFIG)

https://github。com/trailofbits/constexpr-everything

開發Clang LibTooling工具的三種方式

開發Clang LibTooling工具的三種方式

參考專案2:

https://github。com/andreasfertig/cppinsights

llvm_config(LLVM_CXXFLAGS “——cxxflags”)

llvm_config(LLVM_LDFLAGS “——ldflags”)

llvm_config(LLVM_LIBS2 “——libs”)

llvm_config(LLVM_LIBDIR “——libdir”)

llvm_config(LLVM_INCLUDE_DIR “——includedir”)

llvm_config(LLVM_SYSTEM_LIBS2 “——system-libs”)

開發Clang LibTooling工具的三種方式