在iOS的工程中阳柔,尤其是在使用CocoaPods前佳吞,經(jīng)常會把某個靜態(tài)庫或者Framework直接拖到工程中童擎,編譯運(yùn)行通過,這樣就可以了么苏章?
一般我們在xcode里面配置包含工程目錄下頭文件的時候寂嘉,都要關(guān)聯(lián)著相對路徑和絕對路徑奏瞬,如果只是自己用這個項目,用絕對路徑的問題不大泉孩,但是如果你把工程發(fā)給別人硼端,別人就要在改這個絕對路徑,這時候絕對路徑的缺點(diǎn)立馬出現(xiàn)寓搬。
Xcode用戶可以 通過Header Search Paths 來配置環(huán)境變量珍昨。但這里涉及到一個另外一個參數(shù) User Header Search Paths, 這兩者到底有什么區(qū)別呢句喷?
首先明確一點(diǎn)镣典,Header Search Paths 顧名思義就是用來存放 Project 中頭文件的搜索根源,沒有被add到項目里的頭文件唾琼,可以通過配置Header Search Paths 來引入頭文件兄春,這樣的好處可以不讓project 包含的文件太多,便于管理锡溯。
淺顯一點(diǎn)的區(qū)別是赶舆,編碼時候通過 #import 引入頭文件的方式有 <> 和 ""兩種。 <> 是只從 Header Search Paths 中搜索祭饭, 而 "" 則能從 Header Search Paths 和 User Header Search Paths 中搜索芜茵。 換言之 ,假如你把 路徑加到 User Header Search Paths 中倡蝙,那么你用 #import <file.h> 的方式去引入對應(yīng)的頭文件夕晓,就會報錯。 如果加到 Header Search Paths, 就沒有問題了悠咱。
具體一點(diǎn)的區(qū)別是蒸辆,<> 是從系統(tǒng)目錄空間 (對應(yīng) Header Search Paths)中搜索文件, "" 是從用戶目錄空間(對應(yīng) User Header Search Paths)中搜索文件析既。 如果你把路徑加到 User Header Search Paths 中躬贡,卻使用 <>導(dǎo)入頭文件,那么程序無法從系統(tǒng)目錄空間中找到新加的路徑眼坏,從而報錯拂玻。
所以在修改User Header Search Paths這個選項的時候使用
"$(SRCROOT)/當(dāng)前工程名字/需要包含頭文件所在文件夾"
將上面的雙引號里面的字符串拷貝之后,你會發(fā)現(xiàn)這個“$(SRCROOT)”宰译,會自動變成當(dāng)前工程所以的目錄檐蚜。
這樣就可以了,發(fā)給別人沿侈,別人也不用再去修改路徑了闯第。
絕對路徑: 點(diǎn)擊工程某個文件,右鍵“show in finder”打開終端缀拭,cd 把文件夾拖入咳短,即可出現(xiàn)一個路徑填帽,這個就是絕對路徑.
相對路徑: 相對于當(dāng)前工程文件的路徑,“./”表示當(dāng)前工程文件夾咙好,篡腌,"../"表示上層目錄 ,在xcode里“$(PROJECT_DIR)”也表示當(dāng)前工程文件夾目錄
這里還要了解一下在iOS中怎么代表相對路徑和絕對路勁
$(SRCROOT)代表的是項目根目錄下
$(PROJECT_DIR)代表的是整個項目
./也表示當(dāng)前工程文件夾
../表示上層目錄
以上相對路徑后面拼接的必須是項目中真實文件夾名,工程內(nèi)部的group無效勾效!
1.c/c++ 頭文件引用問題
include/import <> 引用編譯器的類庫路徑下的頭文件
include/import “” 引用工程目錄的相對路徑的頭文件
include/import 都是編譯指令嘹悼,在編譯時,編譯器會將相對路徑替換成絕對路徑层宫。因此杨伙,頭文件的絕對路徑=搜索路徑+相對路徑。
Xcode Build Settings 中的 Header Search Paths: 即可設(shè)置頭文件搜索路徑卒密。
例如:文件test.h的路徑為testDemo/libs/test.h,我們在Xcode的
Header Search Paths中添加$(SRCROOT)棠赛,那么項目中引用該文件的寫法為#import "libs/test.h"
如果在Header Search Paths中添加$(SRCROOT)/libs, 那么項目中引用該文件的寫法為#import "test.h"
2. Other Linker Flags:“-ObjC”
當(dāng)導(dǎo)入的靜態(tài)庫使用了類別哮奇,其他鏈接標(biāo)簽設(shè)需要設(shè)為-ObjC