Enjoy Your Coding

Xcode 變更專案編譯及執行目錄

本篇將敘述自己在使用Xcode開發macOS應用程式時,遇到的其中兩個囧境,「我們寫的檔案跑到哪裡去了」+「我們怎麼讀不到我們的檔案」,並說明該如何設定Xcode的專案編譯及執行目錄。

最近我在使用Xcode來開發OpenGL相關的應用程式,遇到了兩個問題:

  • 用來寫Log的模組,相關寫入函式正常運作,但沒有出現寫入的Log檔...
  • 用來讀檔案的模組,相關讀寫函式正常運作,找不到指定的檔案...

C++的寫檔程式碼:

#include <fstream>
#include <string>
#include <iostream>

int main()
{
    std::string input = "Hello World";
    std::ofstream out("output.txt");
    out << input;
    out.close();
    return 0;
}

程式正常執行,但在整個專案資料夾卻沒有發現output.txt這個檔案...

經過檢查Xcode專案的相關設定事項後,發現到其實原因很單純,只是沒注意到Xcode的編譯後的執行檔放在哪個目錄而已,思考了快半小時,才發現只是自己的粗心,並不是Xcode的問題,如果有使用其他的IDE,像Visual StudioNetbeansEclipse執行專案預設的執行目錄就在當前專案目錄下。

整理出以下幾種方式,可處理檔案讀寫問題。

手動找出編譯後的程式路徑

直接編譯專案後,透過左邊的專案導覽直接開啟執行檔的當前目錄。

alt text

打開資料夾後發現,原本他編譯後預設放的目錄在一個超奇怪的地方 囧...(IOTest 為專案名稱)

/Users/ericping/Library/Developer/Xcode/DerivedData/IOTest-aojvtojhditxnjgqbenesalvwnqo/Build/Products/Debug/IOTest

所以我要讀取檔案,我的檔案就應該在這目錄才有辦法讀取呀!!!!!!

修改Xcode的偏好設定

透過點選 Xcode->Preferences 或者按下 Command + , ,開啟Xcode的偏好設定,點選Location

alt text

接著點選Advanced,然後我們會發現Xcode預設的目錄是一個Unique的設定

alt text

為了日後方便,我自己的設定是變更專案編譯的的根目錄是當下的專案目錄(workspace),以後任何專案編譯時,執行檔都會放在專案當下目錄

alt text

設定完成後,編譯專案的結果如下:

alt text

修改專案執行目錄

請點選Xcode執行按鈕(播放圖示)旁邊兩格的專案名稱

alt text

點開後,會出現選單,請點選Edit Scheme

alt text

請勾選「use current working directory:」,點擊旁邊的資料夾圖示,選擇要切換的執行目錄

alt text

在這邊,我的設定為桌面,此設定僅針對當下專案設定,並非全域的設定,設定後範例如下圖:

alt text

修改專案的Current Workspace,並不是修改編譯檔案的路徑,而是將編譯的程式透過Xcode執行時,當下執行程式的目錄

Xcode執行過程如下列指令:

$ cd <修改後專案執行目錄>

$ /<編譯後執行檔的目錄>/<編譯後程式檔名(預設為專案名稱)>

總結

在偶然之間,用Xcode撰寫macOS應用程式,剛好要產生3D模型(.obj)並寫入檔案,以及外部其他模型呈現的專案,遇到了讀寫目錄的問題,開始研究可以透過怎麼樣的設定,來讓開發過程中可以方便點,於是就整理出了上述提到的方法。我對Xcode開發macOS應用程式還不大手,若上述敘述有漏掉或錯誤,麻煩讀者告知我,我會立即修正,謝謝。