一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
Clang插件
编写一个Clang插件,实现效果:定义NSString、NSArray、NSDictionary类型的属性,未使用copy修饰,对该属性提示警告。
下载LLVM
由于国内的网络限制,需要借助镜像下载LLVM的源码:mirror.tuna.tsinghua.edu.cn/help/llvm/
下载LLVM项目
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm/llvm.git
在LLVM的tools目录下,下载Clang
cd llvm/tools
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm/clang.git
在LLVM的projects目录下,下载compiler-rt、libcxx、libcxxabi
cd ../projects
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm/compiler-rt.g
it
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm/libcxx.git
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm/libcxxabi.git
在Clang的tools下,安装extra工具
cd ../tools/clang/tools
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm/clang-tools-e
xtra.git
安装cmake
使用brew命令,查看是否安装cmake,如果已安装,跳过此步骤
brew list
通过brew安装cmake
brew install cmake
编译LLVM
通过Xcode编译LLVM
cmake编译成Xcode项目
mkdir build_xcode
cd build_xcode
cmake -G Xcode ../llvm
使用Xcode编译Clang
选择手动管理Schemes
点击左下⻆加号,在
Target中添加clang和clangTooling
通过
Run Without Building运⾏,代码没有改变的时候,不需要重新编译,直接运⾏现有可执⾏⽂件即可
通过ninja编译LLVM
安装ninja
brew install ninja
在LLVM源码根目录下,新建一个build_ninja目录,最终会在build_ninja目录下生成build.ninja
在LLVM源码根目录下,新建一个llvm_release目录,最终编译文件会在llvm_release文件夹路径下
cd llvm_build
cmake -G Ninja ../llvm -DCMAKE_INSTALL_PREFIX=安装路径
- 本机为
/Users/xxx/xxx/LLVM/llvm_release,注意DCMAKE_INSTALL_PREFIX后面不能有空格 依次执行编译、安装指令
ninja
ninja install
创建插件
在/llvm/tools/clang/tools目录下,新建插件HKPlugin
修改
/llvm/tools/clang/tools目录下的CMakeLists.txt文件
新增
add_clang_subdirectory(HKPlugin)
在
HKPlugin目录下,新建HKPlugi.cpp和CMakeLists.txt文件
打开
CMakeLists.txt文件,写入以下内容:
add_llvm_library( HKPlugin MODULE BUILDTREE_ONLY
HKPlugin.cpp
)
利用cmake重新生成Xcode项目,在build_xcode目录中执行cmake命令
cmake -G Xcode ../llvm
最后,可以在LLVM的Xcode项目中,在Loadable modules目录下找到自定义Plugin目录
- 打开
HKPlugi.cpp文件,可以在里面编写插件代码。
到此Clang插件的创建就完成了,后面我们来进行Clang插件代码的编写。