端末clangでocコードをコンパイルする

1466 ワード

Xcodeのデフォルトのコンパイラはclangで、コンパイラには2つの職責があります.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である.hファイルの内容はこの行のコードを置き換え、Foundation.hにおいても同様のマクロ導入が用いられると,同様の処理方式で各マクロに対応する真のコードを逐次置換する.
  • 文法解析タグソースコードの内容およびソースコードの位置は、抽象構文ツリーの各ノードに対応するソースコードの位置が表示され、同様に、何か問題が発生した場合、clangは問題のあるソースコードの位置に位置決めすることができる.
  • 解析前に生成されたタグストリームは抽象構文ツリー(abstract syntax tree--AST)
  • に解析される.
  • 静的解析静的タイプチェック、定義されているが使用されていない変数があるかどうか、selfを呼び出す前にsuperを呼び出すかどうか、明らかなメモリ問題があるかどうかをチェックします
  • コードはclang完了コードのタグを生成し、解析と分析を行った後、LLVMコード
  • を生成する.
  • 最適化
  • 新しいファイルtxt
    #import 
    
    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/)