我是靠谱客的博主 积极蜗牛,最近开发中收集的这篇文章主要介绍Objective-C开发中Clang的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

来自我的个人博客Minecode.link

在使用Objective-C开发过程中,尤其在了解某些功能的底层实现时,常用到Clang编译器的命令。在此对常用命令做个简单总结。

Clang的简介

Clang是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端,其后端为底层虚拟机(LLVM)。是一个GCC的替代品,也是Xcode的首选编译器。

通过Clang,我们可以做什么?

  • 编译OC代码,这也是它的本职工作。
  • 可以将OC代码转化至C++或汇编代码,从而窥探OC某些特性的底层实现。
  • 在终端快速编译,占用较少内存,同时具有诊断功能。

编译OC代码

除了使用Xcode编译工程,我们也可以通过Clang来手动编译。

在Xcode中开发项目时,我们知道,Project->Targets->Build Phases->Compile Sources中对应的文件标记就是指定该文件为ARC/Non-ARC(MRC)。其中ARC对应-fobjc-arc,MRC对应-fno-objc-arc。而刚才说到Clang实际就是LLVM的前端,所以我们在clang中使用同样指令指定编译方式。如下指令:

ARC下编译指令
clang -fobjc-arc -framework Foundation main.m -o main
MRC下编译指令
clang -fno-objc-arc -framework Foundation main.m -o main

  • -framwork [框架名] 对应所使用的框架
  • -o [文件名] 为输出的可执行文件名

我们在.m文件中输出 “Hello,World”

int main(int argc, const char * argv[]) {
NSLog(@"Hello, World!");
return 0;
}

编译OC代码,生成的可执行文件以及终端执行结果如下:
clang编译oc代码

转换为C++代码

OC底层实现为C,所以要研究其属性、消息机制、Runtime等特性,就要用到Clang的代码转化。

将OC的.m文件转化为C++源代码
clang -rewrite-objc main.m

生成的cpp即为OC的底层实现,接下来就是研究其底层实现的工作了。

转换为汇编代码

高级语言最终是要转化为汇编然后转化为01串的,Clang为我们提供了转化为汇编的功能。

将OC的.m文件转化为汇编源代码
clang -S main.m

生成的.s即为对应的汇编实现。

其他指令

由于其他指令并不常见,不再赘述,列举部分以供查阅。

指令说明
-E预编译代码(即处理宏定义)
-C仅编译但不链接(生成.o链接文件)
-S仅编译不汇编(生成.s汇编代码文件)
-o 文件名链接,输出可执行文件
-g在可执行程序中包含标准调试信息
-I 路径在头文件的搜索路径列表中添加dir目录
-L 路径在库文件的搜索路径列表中添加dir目录

相关资料

  1. Clang documentation

最后

以上就是积极蜗牛为你收集整理的Objective-C开发中Clang的使用的全部内容,希望文章能够帮你解决Objective-C开发中Clang的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部