iOS開發之 相對路徑與絕對路徑html
在iOS的工程中,尤爲是在使用CocoaPods前,常常會把某個靜態庫或者Framework直接拖到工程中,編譯運行經過,這樣就能夠了麼? 通常咱們在xcode裏面配置包含工程目錄下頭文件的時候,都要關聯着相對路徑和絕對路徑,若是隻是本身用這個項目,用絕對路徑的問題不大,可是若是你把工程發給別人,別人就要在改這個絕對路徑,這時候絕對路徑的缺點立馬出現。xcode
XCode用戶能夠 經過Header Search Paths 來配置環境變量。但這裏涉及到一個另一個參數 User Header Search Paths, 這二者到底有什麼區別呢? app
首先明確一點,Header Search Paths 顧名思義就是用來存放 Project 中頭文件的搜索根源,沒有被add到項目裏的頭文件,能夠經過配置Header Search Paths 來引入頭文件,這樣的好處能夠不讓project 包含的文件太多,便於管理。ui
淺顯一點的區別是,編碼時候經過 #include 引入頭文件的方式有兩種 <> 和 ""。<> 是隻從 Header Search Paths 中搜索, 而 "" 則能從 Header Search Paths 和 User Header Search Paths 中搜索。換言之 ,假如你把 路徑加到 User Header Search Paths 中,那麼 你用 #include <file.h> 的方式去引入對應的頭文件,就會報錯。 若是加到 Header Search Paths, 就沒有問題了。編碼
具體一點的區別是,<> 是從系統目錄空間 (對應 Header Search Paths)中搜索文件, "" 是從用戶目錄空間(對應 User Header Search Paths)中搜索文件。若是你把路徑加到 User Header Search Paths 中,而 <> 沒法從系統目錄空間中找到新加的路徑,從而報錯。code
因此在修改User Header Search Paths這個選項的時候使用htm
"$(SRCROOT)/當前工程名字/須要包含頭文件所在文件夾"blog
將上面的雙引號裏面的字符串拷貝以後,你會發現這個「$(SRCROOT)」,會自動變成當前工程因此的目錄。開發
這樣就能夠了,發給別人,別人也不用在去修改路徑了。
1.c/c++ 頭文件引用問題
include <> 引用編譯器的類庫路徑下的頭文件
include 「」 引用工程目錄的相對路徑的頭文件
include 是編譯指令,在編譯時,編譯器會將相對路徑替換成絕對路徑,所以,頭文件絕對路徑=搜索路徑+相對路徑。
Xcode Build Settings 下 Search Paths設置搜索路徑
Header Search Paths:頭文件搜索路徑設置
$(SRCROOT)宏和$(PROJECT_DIR)宏都指xxx.xcodeproj所在的父目錄
例如:引用工程testDemo/scr/test.h 頭文件,
Header Search Paths中添加$(SRCROOT),引用爲include 「scr/test.h"
若是在Header Search Paths中添加$(SRCROOT)/scr,那麼頭文件引用直接引用 include 「test.h」
1.
$(inherited) "$(SRCROOT) 修改.a文件的路徑 --Library Search Paths
$(inherited) "$(SRCROOT)/.a文件所在的文件名"
//若是有多個.a文件格式就像這樣
$(inherited) "$(SRCROOT)/xxxx" "$(SRCROOT)/xx"
若是取的是相對是絕對路徑那麼工程移到別的地方就有可能致使運行出錯。因此要改爲相對路徑
2.
Other Linker Flags:其餘連接標籤
設爲「-ObjC」
當導入的靜態庫使用了類別,須要設爲-ObjC