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

一般在情通常都不建議使用絕對路徑,由於寫死以後,換環境,換平臺,又要從新修改路徑,所以經常使用相對路徑,哪麼相對路徑一般使用的就是環境變量了。xcode

 

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

 

下面主要是以xcode 4.2 --sdk 5.0 進行說明,由於不一樣的環境build settings不同,但差異不大。工具

 

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

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

二、系統自薦的方式code

三、自定義的方式ip

 

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

 

哪怎麼設置自定義方式呢?get

 

xcode->Preferences->locations->advanced(高級)而後在下拉列表中選擇。io

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

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

 

 

由於構選輸出目錄跟這個設置有關,因此先介紹這個設置。

 

實例來講明其中的做用:

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

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

 

二、當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

相關文章
相關標籤/搜索