ios,Xcode-BuildSetting設(shè)置說明

http://blog.csdn.net/guojin08/article/details/38583617

https://developer.apple.com/legacy/library/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html#//apple_ref/doc/uid/TP40003931-CH3-SW105

一、xcode4中的環(huán)境變量

$(BUILT_PRODUCTS_DIR)

build成功后的蔫劣,最終產(chǎn)品路徑--可以在Build Settings參數(shù)的Per-configuration Build Products Path項(xiàng)里設(shè)置

$(TARGET_NAME)

目標(biāo)工程名稱

$(SRCROOT)

工程文件(比如Nuno.xcodeproj)的路徑

$(CURRENT_PROJECT_VERSION)

當(dāng)前工程版本號

其他:

當(dāng)編譯靜態(tài)庫,設(shè)備選模擬器(iPhone 5.0 Simulator)贾陷,未設(shè)置任何Build Settings參數(shù)時柔逼,默認(rèn)的基礎(chǔ)路徑:

/Users/xxx/Library/Developer/Xcode/DerivedData/xxxWorkspace-caepeadwrerdcrftijaolkkagbjf

下面用$()代替上面一長串東東

$(SYMROOT) = $()/Build/Products

$(BUILD_DIR) = $()/Build/Products

$(BUILD_ROOT) =? $()/Build/Products

這三個變量中的$()不會隨著Build Settings參數(shù)的設(shè)置而改變

相反惠爽,以下可以通過設(shè)置而改變

$(CONFIGURATION_BUILD_DIR) = $()/Build/Products/Debug-iphonesimulator

$(BUILT_PRODUCTS_DIR) = $()/Build/Products/Debug-iphonesimulator

$(CONFIGURATION_TEMP_DIR) = $()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator

$(TARGET_BUILD_DIR) = $()/Build/Products/Debug-iphonesimulator

$(SDK_NAME) = iphonesimulator5.0

$(PLATFORM_NAME) = iphonesimulator

$(CONFIGURATION) = Debug

$(TARGET_NAME) = UtilLib

$(EXECUTABLE_NAME) = libUtilLib.a 可執(zhí)行文件名

${IPHONEOS_DEPLOYMENT_TARGET} 5.0

$(ACTION) = build

$(CURRENTCONFIG_SIMULATOR_DIR) 當(dāng)前模擬器路徑

$(CURRENTCONFIG_DEVICE_DIR) 當(dāng)前設(shè)備路徑

$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME =

$()/Build/Products/Debug-iphonesimulator

$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) = $()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator

自定義變量

${CONFIGURATION}-iphoneos 表示:Debug-iphoneos

${CONFIGURATION}-iphonesimulator 表示:Debug-iphonesimulator

$(CURRENTCONFIG_DEVICE_DIR) = ${SYMROOT}/${CONFIGURATION}-iphoneos

$(CURRENTCONFIG_SIMULATOR_DIR) = ${SYMROOT}/${CONFIGURATION}-iphonesimulator

自定義一個設(shè)備無關(guān)的路徑(用來存放各種架構(gòu)arm6/arm7/i386輸出的產(chǎn)品)

$(CREATING_UNIVERSAL_DIR) = ${SYMROOT}/${CONFIGURATION}-universal

自定義變量代表的值

$(CURRENTCONFIG_DEVICE_DIR) = $()/Build/Products/Debug-iphoneos

$(CURRENTCONFIG_SIMULATOR_DIR) = $()/Build/Products/Debug-iphonesimulator

$(CREATING_UNIVERSAL_DIR) = $()/Build/Products/Debug-universal

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模擬器和真機(jī)的靜態(tài)類庫,生成通用庫

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}目錄下河胎,生成兩個設(shè)備都通用的靜態(tài)庫,

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

二游岳、xcode4中build Settings常見參數(shù)解析

1.Installation Directory:安裝路徑

靜態(tài)庫編譯時,在Build Settings中Installation Directory設(shè)置“$(BUILT_PRODUCTS_DIR)”

Skip Install設(shè)為YES

Installation Directory默認(rèn)為/usr/local/lib

因?yàn)锽uild Location默認(rèn)時,.a文件會放在很長(比如:/Users/xxx/Library/Developer/Xcode/DerivedData/xxxProgram

dalrvzehhtesxdfqhxixzafvddwe/Build/Products/Debug-iPhoneos)的路徑下,或是我們target指定的路徑

Skip Install如果是NO,可能會被安裝到默認(rèn)路徑/usr/local/lib

2.Public Headers Folder Path:對外公開頭文件路徑

設(shè)為“include”(具體的頭文件路徑為:$(BUILT_PRODUCTS_DIR)/include/xx.h)

在最終文件.a同級目錄下生成一個include目錄

默認(rèn):/usr/local/include

Public Headers Folder Path這個路徑就是使用這lib的某工程需要依賴的外部頭文件.導(dǎo)入這路徑后旭斥,#include/import "xx.h"才能看到

3.User Header Search Paths:依賴的外部頭文件搜索路徑

設(shè)置為“$(BUILT_PRODUCTS_DIR)/include”

和2中路徑對應(yīng)

4.Per-configuration Build Products Path:最終文件路徑

比如設(shè)為“../app”,就會在工程文件.xcodeproj上一層目錄下的app目錄里,創(chuàng)建最終文件

默認(rèn)為$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

等于$(BUILT_PRODUCTS_DIR)

5.Per-configuration Intermediate Build Files Path:臨時中間文件路徑

默認(rèn)為:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

6.Code Signing Identity:真機(jī)調(diào)試的證書選擇

選一個和Bundle identifier相對應(yīng)的證書

Library Search Paths:庫搜索路徑

Architectures:架構(gòu)作郭,設(shè)為 armv6 或 armv7

Valid Architectures:應(yīng)用框架,可以設(shè)為 armv6弦疮、 armv7 或i386

Product Name:工程文件名夹攒,默認(rèn)為$(TARGET_NAME)

Info.plist File:info文件路徑

Build Variants:默認(rèn)為normal

Other Linker Flags:其他鏈接標(biāo)簽

設(shè)為“-ObjC”

當(dāng)導(dǎo)入的靜態(tài)庫使用了類別,需要設(shè)為-ObjC

iOS Deployment Target:ios部署對象

比如可以選擇設(shè)為胁塞,ios3到ios5的一種版本

Prefix Header:預(yù)編頭文件(比如:UtilLib/UtilLib-Prefix.pch)

Precompile Prefix Header:設(shè)為“Yes”咏尝,表示允許加入預(yù)編譯頭

三、workspace(工作區(qū))

作用:管理多個工程(project)啸罢,多工程聯(lián)編

四编检、workspace多工程聯(lián)編設(shè)置

一、

1.新建一個靜態(tài)庫工程扰才,比如UtilLib允懂,并生成UtilLib.h和UtilLib.m文件

2.選中需要公開的頭文件,

把右側(cè)欄的Target Membership中設(shè)置為public

或則衩匣,選中工程目錄target的Build Phases標(biāo)簽的copy headers項(xiàng)蕾总,在public中添加要公開的頭文件

3.Architectures設(shè)為:armv6 armv7

4.Valid Architectures設(shè)為:armv6 armv7 i386

5.Build Products Path設(shè)為:$(SRCROOT)/../build

6.Per-configuration Build Products Path設(shè)為:

$(SRCROOT)/../build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

7.Per-configuration Intermediate Build Files Path設(shè)為:

$(SRCROOT)/../build/$(TARGET_NAME).build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

8.設(shè)置安裝路徑:Installation Directory項(xiàng)

9.設(shè)置對外公開的頭文件路徑:Public Headers Folder Path項(xiàng)

10.為靜態(tài)庫添加依賴的shell腳本

選中工程目錄target的Build Phases標(biāo)簽,點(diǎn)擊由下角的Add Build Phase按鈕

在彈出的菜單里選擇Add run script項(xiàng)琅捏,然后頁面中會多出一個Run Script項(xiàng)

在黑框里填寫"$SRCROOT/mergeArmSymbols.sh"

建立對此腳本的依賴(編譯靜態(tài)庫的后會運(yùn)行此腳本)

如果編譯時設(shè)備選的是iphone simulator:

則此腳本會在對應(yīng)iphone device的產(chǎn)品目錄Debug-iphoneos中生百,生成對device有用的.a靜態(tài)庫,

相反柄延,如果設(shè)備選的是iphone device:

則此腳本會在對應(yīng)iphone simulator的產(chǎn)品目錄Debug-iphoneos中置侍,生成對simulator有用的.a靜態(tài)庫

最后,此腳本調(diào)用lipo工具拦焚,把本工程生成靜態(tài)庫與此腳本生成的靜態(tài)庫合并蜡坊,生成simulator和device都通用的.a文件

11.具體bash shell腳本如下:

mergeArmSymbols.sh

下載右邊的圖片,然后把后綴改為.sh(其實(shí)就是上面的腳本赎败,因?yàn)椴┛蛨@只能上傳圖片)

靜態(tài)庫編譯后的目錄結(jié)構(gòu)如下:

二秕衙、

1.新建主工程,比如Nuno僵刮,添加對靜態(tài)庫的依賴

點(diǎn)擊工程据忘,在Build Phases標(biāo)簽的Link Binary With Libraries項(xiàng)中點(diǎn)擊加號添加UtilLib.a庫

選中上面的紅色項(xiàng),在右邊欄的Location選Relative to Project搞糕,把值設(shè)為../libs/libUtilLib.a

2.設(shè)置主工程依賴的外部頭文件路徑:User Header Search Paths項(xiàng)

$(SRCROOT)/../include

3.設(shè)置Header Search Paths為:$(SRCROOT)/../include

4.設(shè)置Library Search Paths為:$(SRCROOT)/../libs

編譯運(yùn)行即可實(shí)現(xiàn)聯(lián)編

(備注:選擇模擬器iphone 5.0 simulator勇吊,編譯靜態(tài)庫的時,最終文件會在Debug-iphonesimulator窍仰,就算成功.a文件還是紅色汉规,

這是可能是xcode的bug,不會自動切換路徑

因?yàn)?(BUILT_PRODUCTS_DIR)所指的位置,是build/Debug-iphonesos,不是包含最終.a文件的Debug-iphonesimulator针史;

選擇ios Device晶伦,編譯成的最終文件才在build/Debug-iphonesos下,.a文件變成非紅色

所有得用mergeArmSymbols.sh腳本來解決)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啄枕,一起剝皮案震驚了整個濱河市婚陪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌频祝,老刑警劉巖泌参,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異常空,居然都是意外死亡沽一,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門窟绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锯玛,“玉大人咐柜,你說我怎么就攤上這事兼蜈。” “怎么了拙友?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵为狸,是天一觀的道長。 經(jīng)常有香客問我遗契,道長辐棒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任牍蜂,我火速辦了婚禮漾根,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲫竞。我一直安慰自己辐怕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布从绘。 她就那樣靜靜地躺著寄疏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僵井。 梳的紋絲不亂的頭發(fā)上陕截,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音批什,去河邊找鬼农曲。 笑死,一個胖子當(dāng)著我的面吹牛驻债,可吹牛的內(nèi)容都是我干的朋蔫。 我是一名探鬼主播罚渐,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驯妄!你這毒婦竟也來了荷并?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤青扔,失蹤者是張志新(化名)和其女友劉穎源织,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體微猖,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谈息,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凛剥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侠仇。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖犁珠,靈堂內(nèi)的尸體忽然破棺而出逻炊,到底是詐尸還是另有隱情,我是刑警寧澤犁享,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布余素,位于F島的核電站,受9級特大地震影響炊昆,放射性物質(zhì)發(fā)生泄漏桨吊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一凤巨、第九天 我趴在偏房一處隱蔽的房頂上張望视乐。 院中可真熱鬧,春花似錦敢茁、人聲如沸佑淀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渣聚。三九已至,卻和暖如春僧叉,著一層夾襖步出監(jiān)牢的瞬間奕枝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工瓶堕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隘道,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像谭梗,于是被迫代替她去往敵國和親忘晤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容