OC clang -rewrite-objc 詳解

OC http://www.jianshu.com/p/c2dabb4fd761

 block的語法看上去好像很特別,但實際上是作爲極爲普通的C語言代碼來處理的。這裏我們借住clang編譯器的能力:具有轉化爲我們可讀源代碼的能力。 控制檯命令是: clang -rewrite-objc 源代碼文件名。

?
1
2
3
4
5
intmain(){
    void(^blk)(void) = ^{printf("block\n");};
    blk();
    return0;
}

經過 clang -rewrite-objc 之後,代碼編程這樣了(簡化後代碼,讀者可以搜索關鍵字在生成文件中查找):


我們都知道可以通過Xcode來學習Objective-C編程語言,但是能不能脫離XCode這個IDE進行Objective-C學習呢?當然是可以的。

作爲程序員都應該知道任何一門編程語言都離不開編譯器,OC也不例外,我們可以通過度娘搜索發現,XCode的默認編譯器是clang,那麼問題來了,我能不能通過clang命令直接編譯並運行一段OC代碼呢?當然是可以的。

關於XCode編譯器詳細介紹可以參考該文章:編譯器

下面將敘述一下如何通過Mac OS中文本編輯器創建一個Hello Word的程序,並通過clang命令編譯運行。

步驟1

打開“文本編輯”工具,輸入以下代碼,並保存爲純文本格式,文件名命名爲HelloWord.m,路徑隨意放。

<code class="objectivec"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68);">#import <span class="hljs-title"><Foundation/Foundation.h></span></span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136);">int</span> main(<span class="hljs-keyword" style="color: rgb(0, 0, 136);">int</span> argc, <span class="hljs-keyword" style="color: rgb(0, 0, 136);">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136);">char</span> * argv[])
{ 
  <span class="hljs-keyword" style="color: rgb(0, 0, 136);">@autoreleasepool</span> 
  { 
     <span class="hljs-built_in" style="color: rgb(102, 0, 102);">NSLog</span>(<span class="hljs-string" style="color: rgb(0, 136, 0);">@"Hello, OC!"</span>); 
  }
  <span class="hljs-keyword" style="color: rgb(0, 0, 136);">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102);">0</span>;
}</code>

步驟2

接下來可以利用“終端”將HelloWord.m文件編譯成可執行文件了,具體步驟:
1.打開“終端”
2.通過cd命令進入HelloWord.m文件所在目錄
3.使用clang命令對HelloWord.m文件進行編譯
最後生成HelloWord可執行文件,如下圖所示。


圖1

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

有幾個地方需要注意一下:

  • $符號是終端命令提示符,不是需要輸入的內容
  • -fobjc-arc表示編譯器需要支持ARC特性
  • -framework Foundation表示引用Foundation框架
  • HelloWord.m爲需要進行編譯的源代碼文件
  • -o HelloWord表示輸出的可執行文件的文件名

步驟3

生成可執行文件後,就可以在終端中執行該文件了,輸入的命令如下:

$ ./HelloWord

執行結果如下圖:


圖2

另外也可以直接雙擊運行剛纔生成的HelloWord可執行文件,運行結果和上面運行結果一樣。

圖3


至此通過幾個簡單的clang命令,就可以編譯運行一段簡單的HelloWord的Objective-C代碼了。



文/Kevin丨Wang(簡書作者)
原文鏈接:http://www.jianshu.com/p/c2dabb4fd761
著作權歸作者所有,轉載請聯繫作者獲得授權,並標註“簡書作者”。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章