[Objective-C] 程式設計教學:在 GNU/Linux 平台上以 GNUstep 建立開發 Objective-C 程式的開發環境

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
【贊助商連結】

    前言

    蘋果公司 (Apple Inc.) 沒有將 Cocoa 框架放到其他平台上,日後應該也不會放。若想要在 GNU/Linux 上練習 Objective-C,可以用 GNUstep,這是一個 Cocoa 的自由軟體再製版本。主流的 GNU/Linux 應該都會提供預編好的 GNUstep 套件,但也可以自行從原始碼來編譯;我們兩種方法都會介紹,並且比較其差異。

    一般的方法,使用現有的 GNUstep 套件

    有一些主流 GNU/Linux 發行版會提供預編好的 GNUstep 套件,直接安裝這些套件是最簡單的方式。在 Ubuntu 或 Debian 上可用以下指令安裝:

    $ sudo apt-get install gnustep-devel
    

    至於 CentOS 則沒有提供現有的套件,可參考下文中有關從原始碼編譯的章節來編譯及安裝 GNUstep;經筆者實測,CentOS 缺一些相依函式庫,需較多手工才能完成整個編譯過程。

    選擇適用於 GNUstep 的編輯器 (editor) 或整合式開發環境 (IDE)

    由於 Objective-C 的主流平台是 Mac,在 GNU/Linux 並沒有什麼大型 IDE 可用。AtomVSCode 對 Objective-C 有語法高亮 (syntax highlighting) 等基本支援。EditRocket 是一個多語言商業編輯器,可試用 30 天後再買,有興趣的讀者可自行試用。

    撰寫 GNUstep 版本的 Hello World 程式

    Hello World 程式是用來確認開發環境可正常運作,一開始不用急著了解程式的語義。本節建立一個 Objective-C 版本的 Hello World 程式。

    用編輯器或 IDE 建立新的檔案 hello.m ,加入以下內容:

    #import <Foundation/Foundation.h>
    
    int main (int argc, const char * argv[])
    {
        @autoreleasepool {
            NSLog(@"Hello World");
        }
    
        return 0;
    }
    

    現階段 Hello World 程式的用途是確認開發環境可正常運作,暫時不用糾結在語法細節上,我們會於後文介紹其語法。

    撰寫 hello.m 後,使用以下指令來編譯及執行程式:

    $ gcc -o hello hello.m -lobjc -lgnustep-base -I /usr/include/GNUstep -L /usr/lib/GNUstep/Libraries -fconstant-string-class=NSConstantString
    

    由於 GNUstep 不是位於 GCC 的標準路徑上,所以我們要以 -I 指定頭文字檔 (header) 的位置,以及 -L 指定二進位函式庫的位置。不同發行版的 GNUstep 安裝位罝可能有差異,要根據實際的位置修改相關的路徑。

    讀者一定會覺得這個指令很長,每次都要逐字打相當繁瑣。GNUstep 提供 GNUstep Make,這是一套以 Makefile 為基礎的專案設定框架,用來簡化編譯 Objective-C 程式的過程,我們將於後文介紹這個軟體。

    另外,由於 NSLog 是用於紀錄檔 (log) 的函式,故會跑時間戳記 (time stamp) 出來,和傳統上 C 語言的 printf 函式略有不同。

    替代的方法,自行從原始碼編譯及安裝 GNUstep

    使用現有的 GNUstep 套件相當簡單,但這些套件所提供的 GNUstep 可能版本較舊,若想要使用較新版本的 GNUstep,可以試著自行編譯;另外,有些 GNU/Linux 發行版沒有現成的 GNUstep 套件,這時候也可以試著自己編譯。我們以 Ubuntu 為例,展示編譯及安裝 GNUstep 的過程。

    建立一個目錄 (directory),因為我們會抓數個子專案。參考以下指令:

    $ mkdir gnustep
    $ cd gnustep
    

    接下來的操作,都會在此工作目錄下。

    用 Git 下載以下子專案:

    $ git clone https://github.com/gnustep/tools-make
    $ git clone https://github.com/cwchentw/libs-base.git
    $ git clone https://github.com/gnustep/libs-gui
    $ git clone https://github.com/gnustep/libs-back
    $ git clone https://github.com/gnustep/plugins-session.git
    $ git clone https://github.com/cwchentw/tools-scripts.git
    

    在這五個專案中,前四個專案是 GNUstep 實際的函式庫和工具軟體,第五個專案是一些設定檔,而第六個專案則是一些跑編譯及安裝 GNUstep 的命令稿。眼尖的讀者會發現其中幾個專案的來源不是 GNUstep 上游,而是筆者 fork 出來的版本,因為這些 fork 出來的專案是筆者實際修改及安裝的版本,目前還沒有被 GNUstep 開發團隊接受。

    在 Ubuntu (或 Debian) 上透過以下指令安裝相依套件:

    $ sudo ./tools-scripts/install-dependencies
    

    如果讀者使用其他發行版的話,目前 GNUstep 開發團隊沒有釋放等效的命令稿,需參考這個命令稿自行手動安裝相依套件。

    重新回到 gnustep 目錄的根目錄,輸入以下指令:

    $ ./tools-scripts/compile-all
    

    如果順利的話,這個指令會使用 GCC 編譯器,依序將 GNUstep 的四個子專案編譯並安裝到 /usr/GNUstep 目錄上。

    如果發生錯誤的話,就不要一直重試了;錯誤原因沒有排除的話,仍然會發生錯誤,不會自動修好。這時候建議將 tools-scripts/compile-all 內的指令逐一貼到終端機上,慢慢看是那個環節發生了問題。

    如果錯誤成因在 GNUstep 子專案本身的話,可以將該專案 fork 一份,進行修改後發出 PR (pull request),若被 GNUstep 開發團隊接受的話,代表讀者也替 GNUstep 專案盡了一些心力。

    小結

    在本文中,我們為讀者介紹了兩種在 GNU/Linux 平台上建立 GNUstep 開發環境的方式。一般來說,使用現有的 GNUstep 套件可以很快建置 Objective-C 開發環境;必要時,仍然可以自行從原始碼編譯和安裝。

    類 Unix 系統在設計時,主要是以 C 語言為考量,相對來說,GNUstep 編譯環境有可能不是放置在標準位置上;著眼於 GNUstep 程式碼編譯的問題,GNUstep Make 是一套用來簡化 Objective-C 專案的編譯過程的設定檔,我們將於後文介紹。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【支持站長】
    Buy me a coffeeBuy me a coffee
    【贊助商連結】
    標籤: OBJECTIVE-C
    【分類瀏覽】