美文网首页
在终端clang编译oc代码

在终端clang编译oc代码

作者: 大美象 | 来源:发表于2017-03-08 14:43 被阅读117次

Xcode 的默认编译器是 clang,编译器有两个职责:把 Objective-C 代码转化成低级代码,以及对代码做分析,确保代码中没有任何明显的错误。

clang -ccc-print-phases helloword.m

0: input, "helloword.m", objective-c
1: preprocessor, {0}, objective-c-cpp-output
2: compiler, {1}, ir
3: backend, {2}, assembler
4: assembler, {3}, object
5: linker, {4}, image
6: bind-arch, "x86_64", {5}, image

编译器工作的阶段:

  • 预处理
    预处理首先处理的是宏定义,例如,如果在源文件中出现下述代码:
#import <Foundation/Foundation.h>

预处理器对这行代码的处理是用 Foundation.h 文件中的内容去替换这行代码,如果 Foundation.h 中也使用了类似的宏引入,则会按照同样的处理方式用各个宏对应的真正代码进行逐级替代。

  • 词法解析标记
    标记源码内容及在源码中的位置,在抽象语法树中的每个节点都标注了其对应源码中的位置,同样的,如果产生了什么问题,clang 可以定位到问题所在处的源码位置。
  • 解析
    之前生成的标记流将会被解析成一棵抽象语法树 (abstract syntax tree -- AST)
  • 静态分析
    静态的类型检查,检查是否有定义了却没有使用的变量,调用self之前有没有调用super,有没有明显的内存问题
  • 代码生成
    clang 完成代码的标记,解析和分析后,接着就会生成 LLVM 代码
  • 优化

新建文件 helloword.txt

#import <Foundation/Foundation.h>

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

在终端输入命令行

clang -fobjc-arc -framework Foundation HelloWord.m -o HelloWord

就生成了可执行文件,在终端输入执行代码

 ./HelloWord

或者双击可执行文件即可执行代码

[原文] (https://objccn.io/issue-6-2/)

相关文章

网友评论

      本文标题:在终端clang编译oc代码

      本文链接:https://www.haomeiwen.com/subject/ukjbgttx.html