使用clang将OC代码转为C/C++

Clang
clang -rewrite-objc 的作用是把oc代码转写成c/c++代码,我们可以用它来查看OC的底层实现。

简介

在 test.m 所在目录执行如下命令,可在当前目录生成 test.cpp:

1
clang -rewrite-objc test.m

更多参数

以上命令只使用非常简单的源文件,即不包含系统头文件或第三方头文件的源文件。若包含系统头文件,执行该命令会提示找不到头文件,可以进行指定SDK版本解决。

查看当前机器已安装的 SDK

1
xcodebuild -showsdks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
➜  OCTest xcodebuild -showsdks
iOS SDKs:
iOS 11.2 -sdk iphoneos11.2

iOS Simulator SDKs:
Simulator - iOS 11.2 -sdk iphonesimulator11.2

macOS SDKs:
macOS 10.13 -sdk macosx10.13

tvOS SDKs:
tvOS 11.2 -sdk appletvos11.2

tvOS Simulator SDKs:
Simulator - tvOS 11.2 -sdk appletvsimulator11.2

watchOS SDKs:
watchOS 4.2 -sdk watchos4.2

watchOS Simulator SDKs:
Simulator - watchOS 4.2 -sdk watchsimulator4.2

指定真机

1
xcrun -sdk iphoneos clang -rewrite-objc test.m

指定模拟器

1
xcrun -sdk iphonesimulator clang -rewrite-objc test.m

指定 SDK 版本

1
xcrun -sdk iphonesimulator10.3 clang -rewrite-objc test.m

其他

还可指定头文件路径、Framework等等,参见man clang

Cotin Yang wechat
欢迎订阅我的微信公众号 CotinDev
小小地鼓励一下吧~😘