2012-08-13 95 views
4

我在命令行中用xcodebuild構建我的項目。不在xCode中。我想將一些marc傳遞給該項目,以便它可以影響代碼。如下面的代碼:如何將用戶定義的宏傳遞給xcodebuild?

#if (API_TYPE == 1) 
    #define URL_API @"https://dapi.xxx.com/1.1/" 
#elif (API_TYPE == 2) 
    #define URL_API @"https://tapi.xxx.com/1.1/" 
#elif (API_TYPE == 3) 
    #define URL_API @"https://api.xxx.com/1.1/" 
#else 
    #error "API_TYPE value error! should be only value 1,2,3 !" 
#endif 

我想在代碼文件外傳遞API_TYPE的定義。比如通過xcodebuild命令。 但它並不像這樣工作:

xcodebuild -sdk xxx -target xxx SYMROOT=${XCSYMROOT} API_TYPE=${APITYPE} 

的API_TYPE的價值沒有改變。但是SYMROOT的值已經改變了。 那麼如何實現將值傳遞給API_TYPE之外?

回答

2

您使用的命令行設置有效地設置了一個環境變量,至少在Xcode的構建環境中。但是這個構建環境並沒有被傳遞到編譯器的預處理器中,就像設置一個shell環境變量不會使該環境變量在預處理器中可見一樣。

要使其在預處理器中可見,請在項目的預處理器宏構建設置中或針對特定目標添加條目。該條目應該具有「FOO = $(FOO)」的形式。 Xcode將此作爲「-DFOO = 」的值從環境傳遞給編譯器。

當編輯預處理宏設置,請確保您正在編輯它(您想設置它,如果你不想把它全部或配置)的所有配置。

+0

我可以定義API_TYPE。但我無法改變它的定義值。如SYMROOT。 – qiushuitian 2012-08-13 08:49:44

+0

對不起,我不明白你的評論。在預處理器宏構建設置中輸入文本「API_TYPE = $(API_TYPE)」時是否遇到問題? – 2012-08-13 11:12:14

+0

我在xcode項目設置的調試配置中輸入文本「API_TYPE = 0 DEBUG = 1」。但是在使用xcodebuild的命令行中,如下面的命令:「APITYPE = 2 xcodebuild -sdk xxx -target xxx SYMROOT = $ {XCSYMROOT} API_TYPE = $ {APITYPE}」它喜歡值2沒有傳遞給xcodebuid命令。 API_TYPE = 1值影響建築結果。 – qiushuitian 2012-08-14 03:07:42

3

我知道這是舊的文章,但爲什麼不使用:

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS API_TYPE=1' 

如果你希望能夠擁有它選擇覆蓋現有的應用程序定義,只是代碼是這樣的:

#define DEFAULT_API_TYPE 1 

#ifdef API_TYPE 
    #define REAL_API_TYPE API_TYPE 
#else 
    #define REAL_API_TYPE DEFAULT_API_TYPE 
#endif 
相關問題