2014-04-11 43 views
1

我的項目使用Settings.h來存儲常見的配置設置,比如服務器url等。我一直負責從這個代碼創建一個新的應用程序,其中只有少數參數,如服務器url,圖標等等是不同的。包含基於xcode方案的頭文件

我在我的xcode工作區中有一個新的目標。我在不同的文件夾2 Settings.h像

awesomeProject/Settings/Settings.h 
oldProject/Settings/Settings.h 

的Settings.h包含在該項目(通過.PCH沒有加載)的幾個地方。我試圖設置兩個目標的標題搜索路徑,這不起作用(如在編譯awesomeProject目標包括oldProject的Settings.h)。

有沒有辦法根據目標#include Settings.h而不訴諸#ifdef .. #endif構造?

+0

您是否試圖在一個項目中使用名爲'Settings.h'的兩個獨立文件? – Logan

+0

是兩個具有相同名稱但位於不同文件夾中的頭文件。 –

回答

1

如果我理解正確,並且您有單獨的目標需要包含不同的頭文件,所以您應該能夠以不同的方式設置「頭文件搜索路徑」並獲取正確的文件。你說過你試過這個,但你可能想嘗試做一個乾淨而完整的重建。

+0

我在建築之前嘗試清理過這個項目,但它沒有工作。然後,我嘗試從組織者中刪除「派生數據」,這種工作方式。 它看起來像xcode會加載編譯時遇到的第一個頭文件。例如http://take.ms/96m8N,如果我將newProject重新安排在oldProject上,並且無論我構建什麼目標(它們都具有自定義標頭搜索路徑),都會加載第一組頭文件。 不知道該怎麼做。 –

+0

「標題搜索路徑」是正確的選擇。除此之外,我需要設置一個名爲「USE_HEADERMAP」的「用戶定義的變量」,其值爲「NO」,詳細信息請參閱http://stackoverflow.com/questions/2596695/controlling-which-project-header-file-xcode-將包括 注意:這個副作用是你被迫添加到「標題搜索路徑」的所有文件夾與相關的頭文件。 –

0

我會嘗試利用預處理器來實現您的目標。一種選擇是在每個目標宏SETTINGS_H的構建設置中定義,其將根據目標爲「awesomeProject/Settings/Settings.h」或「oldProject/Settings/Settings.h」。然後在源代碼中,您可以#include SETTINGS_H。當然,您可能需要調整標題搜索路徑才能找到每個標題。

老實說,#include SETTINGS_H對我的品味來說是一個難看的東西,所以我更喜歡另一種方法。您可以保留單個「Settings.h」文件,但使用宏作爲常量值。例如,在「Settings.m」

NSString *const kServerURL = SERVER_URL; 

和目標構建設置添加到GCC_PREPROCESSOR_DEFINITIONS

SERVER_URL='@"http://stackoverflow.com"' 

您可能需要加上引號發揮達到預期的效果。要更好地組織項目,可以將宏的定義移至.xcconfig文件,併爲每個目標保留單獨的.xcconfig文件。