MelonTeam 移动终端前沿技术的探索者

手把手教你使用Xcode clang插件

2017-09-14
yockieyang
ios

| 导语 最近突然兴起想看一下clang插件的内容,作为一个初学者疯狂的搜索各个博客网站的内容,结果按各个网站的步骤尝试下来,一直error,error。(也可能是我能力有限,看不懂大神们的操作),终于在今天编译成功了,所以想把自己的操作详细的记录下来,跟博客差不多,但把博客的一些错误最近突然兴起想看一下clang插件的内容,作为一个初学者疯狂的搜索各个博客网站的内容,结果按各个网站的步骤尝试下来,一直error,error。(也可能是我能力有限,看不懂大神们的操作),终于在今天编译成功了,所以想把自己的操作详细的记录下来,跟博客差不多,但把博客的一些点给去掉了,也算方便后面的学习者吧。

本次学习的环境是Xcode8.3.1,其他版本的Xcode不一定保证成功
1.获取clang源码
从这里https://opensource.apple.com/tarballs/clang/ 把相应的clang源码下下来,最好是最新版的,目前最新版的源码是clang-800.0.42.1。其中LLVM主要的子项目包括:

2.编译LLVM得到相应的dylib文件
下载源码完成后解压目录,接下来就是要做编译LLVM的工作了。首先来对这些源码生成一个Xcode工程,源码项目的编译是由cmake管理(关于cmake详细资料请参考:cmake官方教程),因此生成Xcode工程非常方便。具体编译LLVM的步骤如下:
1.进入到你的(非终端)/clang-800.0.42.1/src/tools/clang/examples这个路径,向里面的CMakeLists.txt添加一行add_subdirectory(MyPlugin)

2.然后用命令行创建文件夹MyPlugin及其里面的文件

3.向MyPlugin你新创建出来的CMakeLists.txt加入下面的代码

4.MyPlugin你新创建出来的MyPlugin.cpp加入下面的代码,代码一个截图截不下来,看后面附件吧。

5.然后cd到clang-800.0.42.1根目录,执行下面的命令。

6.就会得到如下的LLVM Xcode工程。

7.编译这个工程的MyPlugin,同时编译clang源码,看看是否可以编译得过。

8.这时你就会在/Debug/lib得到一个MyPlugin.dylib的库

3.通过Xcode使用相应的插件文件
1.新建一个test工程
2.在Build Settings other C Flags里面添加如下选项
-Xclang -load -Xclang /Users/yockieyang/Desktop/homeWork/llvm/llvm/clang-800.0.42.1/build/Debug/lib/MyPlugin.dylib -Xclang -add-plugin -Xclang MyPlugin -Xclang -plugin-arg-MyPlugin -Xclang $SRCROOT/..

3.如果你此时运行你相应的程序,你会发现会出现下面这样一个错误。是因为你的程序用的是IOS原生默认的clang.原生默认的clang是编译不过你的dylib库的,必须用你上面编译出来的clang文件编译,可以通过在Xcode工程的buildSetting添加CC和CXX将系统默认的clang改为你自己的clang.具体添加方法如下:

4.这时你就可以编译你的test工程了,编译过程有点慢。但还是成功编译了,如果你此时建立一个叫a_bc的Cocoa Class文件。由于我们这个插件的作用是检测文件名是否按照驼峰命名法命名,如果不是会报相应的错误,所以你此时的程序是编译不过的。提示信息如下:

至此,一个插件就算安装完成了。
4.随包处理
上面的相应clang程序和dylib程序都只是在本地,而我们的程序最终要上传到AppStore上去的,所以就不能指向本地了,我们所做的操作就是随包处理。也很简单,将LLVM Debug 里面的bin的所有可执行程序和lib你的dylib程序和clang文件夹一起Add到你的应用程序里面,然后build Setting重新指向正确的路径就可以了,具体效果如下。

5.总结
以上只是教你在Xcode中怎么使用一个相应的clang插件,至于怎么调试插件程序,以及插件程序所用到的知识,代码,接口我们在之后的文章给出来。
文章参考:http://www.jianshu.com/p/581ef614a1c5


说一说

目录