這兩天在弄項(xiàng)目分支的時(shí)候诡壁,發(fā)現(xiàn)自己對項(xiàng)目中 build Setting 的這兩個(gè)東東老是感覺迷糊济瓢,有點(diǎn)不清楚,特此筆記下妹卿。
- Other Linker Flags
- Search Paths
1旺矾、Other Linker Flags
通常我們會在這個(gè)選項(xiàng)中加入 ,最常用的是 -ObjC , 他們有什么作用呢夺克?
- -ObjC
- -all_load
- -force_load
一般在我們使用某些靜態(tài)庫的時(shí)候箕宙,里面可能有一些類的分類,正常情況下 鏈接器 會以為這個(gè)分類已經(jīng)存在懊直,而不去讀了扒吁,導(dǎo)致了我們?nèi)笔Я苏5墓δ埽詾榱税堰@些分類和核心類的代碼合起來室囊,必要的時(shí)候我們得加上 -ObjC, 形成我們需要的可執(zhí)行文件雕崩。
- -ObjC : 鏈接器把靜態(tài)庫中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中,保證都可執(zhí)行融撞。但是當(dāng) 靜態(tài)庫中只有分類而沒有類的時(shí)候盼铁,-ObjC參數(shù)就會失效了
- -all_load: 鏈接器把所有找到的目標(biāo)文件都加載到可執(zhí)行文件中。但是可能不同的靜態(tài)庫使用了相同的文件導(dǎo)致出錯(cuò)尝偎。
- -force_load: 它也是讓鏈接器把所有找到的目標(biāo)文件都加載到可執(zhí)行文件中饶火,但是它需要指定進(jìn)行全部加載的庫文件的路徑鹏控,從而保證只是完全加載了一個(gè)庫文件。
總的來說肤寝,一般用 -ObjC当辐,就算當(dāng)其失效后,用 -force_load 就可以鲤看,而不用-all_load缘揪。
具體詳解可閱讀: 關(guān)于Xcode的Other Linker Flags
2、Search Paths
常用路徑 path 义桂,就是下面三種啦:
Framework Search Paths
附加到項(xiàng)目中的framework 的搜索路徑找筝。Library Search Paths
附加到項(xiàng)目中的第三方Library的搜索路徑。Header Search Path
頭文件的搜索路徑慷吊。User Header Search Paths
只有在Always Search User Paths為Yes時(shí)才會被搜索袖裕。
此處我們可以先來了解下:
- $(inherited):添加目錄的時(shí)候?qū)懮?“$(inherited)” 就是表示路徑自己從frameworks里面讀取。 默認(rèn)的情況下路徑配置是不被 Targets 繼承的溉瓶,只有當(dāng)Targets的設(shè)置加入了$(inherited)時(shí)才被繼承急鳄,繼承來自更高一級的配置。
- ${PODS_ROOT} : 使用 CocoaPods 時(shí)候堰酿,Pods 下的路徑攒岛。有時(shí)在用cocoaPod install 完成所需要的第三方類庫之后,在要用的地方導(dǎo)入(#import)發(fā)現(xiàn)不提示胞锰,需要自己手動(dòng)加入,但現(xiàn)在很少見這種情況啦兢榨。
- ${SDK_DIR}: 指編譯目標(biāo)所使用的 SDK 的目錄嗅榕。
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk
- $(SRCROOT) : 代表項(xiàng)目工程文件目錄,很好的避免其他同學(xué)使用時(shí)需要再換路徑的情況吵聪。
- $(PROJECT_DIR) : 表示當(dāng)前工程文件夾目錄凌那,相對路徑(相對于當(dāng)前項(xiàng)目文件夾)。和$(SRCROOT) 區(qū)別是它代表** 整個(gè)項(xiàng)目 **吟逝。
如最常見的錯(cuò)誤:
- warning:ld: warning: directory not founder option
查找 Library Search Paths 和 Framework Search Paths帽蝶,刪掉編譯報(bào)warning的路徑即OK。 - warning:ld: library not found for -lPods
在 Build Setting 中 other linker flag 里块攒,加上$(inherited)即可励稳。
備注參考
http://small.qiang.blog.163.com/blog/static/978493072013112571950/
http://blog.devzeng.com/blog/ios-xcode-search-paths.html
http://ship2013.blog.163.com/blog/static/22861106720131126103130568/