Clang LibTooling 开发环境搭建

1,216 阅读2分钟

前言:

Clang为一些需要分析代码语法,语义信息的工具提供了基础设施。包括LibClang,Clang Plugin和LibTooling。我们可以通过这些基础设施来实现一些语法检查工具,自动代码格式工具,重构工具等。本文介绍了如何去构建一个开发基于Clang的工具包的开发环境。

Step0:下载Clang工程文件

Clang是LLVM工程的一部分,所以需要首先下载LLVM的源代码。Clang和LLVM在同一个git repository中,在不同目录下。关于LLVM可通过此链接了解更多:LLVM

mkdir /clang-llvm&&cd clang-llvm
git clone https://github.com/llvm/llvm-project.git

Step1:下载安装CMake和ninja

接下来我们需要获取CMake编译系统以及Ninja编译工具。

cd clang-llvm
git clone https://github.com/martine/ninja.git
cd ninja
git checkout release
./bootstrap.py

安装ninja为系统命令行工具。在linux系统中可以直接sudu cp ninja /user/bin。

如果是MacOS系统:

cd ~
mkdir bin
mv ~/clang-llvm/ninja/ninja ~/bin/
touch .bash_profile
vim .bash_profile #修改环境变量,把~/bin添加到PATH
source .bash_profile

构建cmake首先去官网根据平台下载需要的包 cmake.org/download/,拷贝解压缩到~/clang-llvm/目录下

cd cmake
./bootstrap
make
sudo make install

Step2:构建Clang

接下来构建Clang

cd ~/clang-llvm
cd llvm-project
mkdir build && cd build
cmake -G Ninja ../llvm -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DLLVM_BUILD_TEST=ON
ninja
ninja check
ninja clang-test
sudo ninja install

最后我们设置Clang为它自己的编译器

cd ~/clang-llvm/llvm-project/build
ccmake ../llvm

如上命令会产生GUI让你去配置Clang,保证CMAKE_CXX_COMPILER设置没问题,可以按'g'来创建CMake的文件. 

Step3:创建Clang工程

以上步骤基本完成了Clang开发环境的搭建。以下介绍如开创建Clang工程:

cd ~/clang-llvm/llvm-project/
mkdir clang-tools-extra/LibTooling-project1
echo 'add_subdirectory(LibTooling-project1)' >> clang-tools-extra/CMakeLists.txt
vim clang-tools-extra/LibTooling-project1/CMakeLists.txt

CMakeLists.txt包含如下内容:

set(LLVM_LINK_COMPONENTS support)

add_clang_executable(LibTooling-project1
    xxx.cpp  #工程中的main方法所在文件
    )

target_link_libraries(LibTooling-project1
    PRIVATE
    clangTooling #此处添加需要引入的Clang库
    clangBasic
    clangASTMatchers
    )

以上步骤完成之后,需要再次执行一次cmake -G Ninja 来生成build.ninja编译工程文件

cd ~/clang-llvm/llvm-project/build
cmake -G Ninja ../llvm -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DLLVM_BUILD_TESTS=ON
ninja

至此便完成了新添加工程的build工作

注意事项:

如果电脑中安装了Xcode,则新build的clang可执行文件可能会替换原Xcode的clang,导致Xcode的工程编译出错。因此,可以选择不新安装新build的clang可执行文件。

参考文献:

http://clang.llvm.org/docs/LibASTMatchersTutorial.html