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