修改XCode的Product的輸出目錄(有時不生效需看)


通常在情一般都不建議使用絕對路徑,因為寫死之后,換環境,換平台,又要重新修改路徑,因此常常使用相對路徑,哪么相對路徑通常使用的就是環境變量了。

 

在Mac 中,xcode 中build settings里面就有好多環境變量。

 

下面主要是以xcode 4.2 --sdk 5.0 進行說明,因為不同的環境build settings不一樣,但差別不大。

 

xcode 的build settings配置項有幾種設置

1、使用.xcconfig的方式進行配置

2、系統自薦的方式

3、自定義的方式

 

默認情況下,創建工程都是以自薦的方式,即默認已經設置好這些配置了。

 

哪怎么設置自定義方式呢?

 

xcode->Preferences->locations->advanced(高級)然后在下拉列表中選擇。

Derived Data Location (Recommended)   ---系統自薦目錄

Locations Specified by Targets                   ---使用targets文件進行設置,即我們每次建項目的時候都會產生一個targets,通過targets中的選項進行設定輸出路徑。

 

 

因為構選輸出目錄跟這個設置有關,所以先介紹這個設置。

 

實例來說明其中的作用:

1、選創建一個演示項目。如圖:

存放目錄為/Users/ffsh/Desktop/CProjectSet,其中ffsh為登錄的用戶名。

 

2、當xcode->Preferences->locations->advanced 中選擇為Derived Data Location (Recommended) 時:

Derived data有三種選擇如圖:

a、當選擇為default時,Derived Data的目錄為  /Users/xxx/Library/Developer/Xcode/DerivedData

b、當選擇為Relative時,Derived Data的目當為 當前.xcodeproj所在的目錄。見圖:

c、當選擇為custom,即自定義,為了查看是否輸出到自定義,我在Desktop下建了一個custom文件夾,然后設置Custom的輸出路徑為:/Users/ffsh/Desktop/Custom

同樣可以把原來Derived Data下的東東全部輸出到了custom。

上面是自薦的方式。

當xcode->Preferences->locations->advanced 中選擇為Locations Specified by Targets時:

先來設置一下Build Products Path 中的值(默認為Build),這里取為myBuild.

然后分別將Derived Data設為:

a、default時,產生的mybuild 目錄在.xcodeproj目錄。

可以看到原來Derived Data目錄下不現產生Build的文件夾了,些文件夾被放到了.xcodeproj目錄。

               

b、Relative時,mybuild目錄不變,但Derived Data目錄放到了xcodeproj目錄了。

c、custom時,把Derived data下的內容放到了custom目錄。

 

如果Build Products Path 中的值為mybuild,但還是自薦方式的話,此時mybuild是不起作用的。

 

事實上,從上面大家可以知道,build出來的內容包括兩個,一個是正式的,一個是臨時的。可以在自薦的放式下看到

Build下有四個文件夾分別為:

filemaps

intermediates                      --編譯中間產生的文件(temp)

precompileheaders

products  --編譯最終產生的文件。

 

設置Build Products Path路徑,其實是把products中的內容放到這個路徑下。

設置Intermediates Build files path ,其實是把intermediates中的內容放到這個目錄下。

 

 

Build Locations中的4個設置項的值:

默認情況下的

以下用$(default) 代替 /Users/xxx/Library/Developer/Xcode/DerivedData/CProjectSet-erpfssifqoxezbcceyoqjoclrfds 

 

$(SYMROOT)  = $(default)/Build            -- 對應於Build Products Path設置,如果為自薦方式,這個值填了無效果,如果為使用targets配置方式這里填的才起效果

$(SYMROOT)/intermediates    ----中間構建文件存放路徑,其中在Intermediates Build files path中只需要設為$(SYMROOT)即可,intermediates系統自動生成。 

$(BUILD_DIR) = $(SYMROOT)/products

$(BUILD_ROOT) = $(BUILD_DIR) 

 

$(CONFIGURATION)  當項目Build時選譯Build configuration為Debug時值為Debug,當選為Release時,值為Release

$(EFFECTIVE_PLATFORM_NAME)   當模似器時為值為-iphonesimulator 當為真機時為-iphoneos

$(PROJECT_TEMP_DIR)   =  $(SYMROOT)/intermediates/xxxx.build       基中xxxx表過項目名稱

$(CONFIGURATION_BUILD_DIR)   =  $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)       ---- (Per-Configuration Build Products Path)

$(CONFIGURATION_TEMP_DIR)   =    $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)     --(Per-Configuration Intermediate File Path)

 

自定義的情況下:

$(SYMROOT)  = $(SRCROOT)/abc            --- 其中abc為自己在Build Products Path中設置的值

$(BUILD_DIR) = $(SYMROOT)

$(BUILD_ROOT) = $(BUILD_DIR)

 $(PROJECT_TEMP_DIR)   =  $(SYMROOT)/xxxx.build

 

通過自定義可以自行設定構建目錄,便於管理。

 

 

iphoneos5.0下的編譯腳本:

xcodebuild -project "UtilLib.xcodeproj" -configuration "Debug" -target "UtilLib" -sdk "iphoneos5.0" -arch "armv6 armv7" build RUN_CLANG_STATIC_ANALYZER=NO  $(BUILD_DIR)="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

 

iphonesimulator5.0下的編譯腳本:

xcodebuild -project "UtilLib.xcodeproj" -configuration "Debug" -target "UtilLib" -sdk "iphonesimulator5.0" -arch "i386" build RUN_CLANG_STATIC_ANALYZER=NO $(BUILD_DIR)="${BUILD_DIR}"  BUILD_ROOT="${BUILD_ROOT}"

加上下面一句表示輸出到文件:

> "${BUILD_ROOT}.build_output"

 

lipo腳本工具:合並iPhone模擬器和真機的靜態類庫,生成通用庫

lipo -create -output "${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}"         "${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}"

意思是:把"${CURRENTCONFIG_DEVICE_DIR}目錄下的.a文件,和${CURRENTCONFIG_SIMULATOR_DIR}目錄下的.a文件合並,

在${CREATING_UNIVERSAL_DIR}目錄下,生成兩個設備都通用的靜態庫,

例如:lipo -create -output xy.a x.a y.a


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM