iOS開發(fā)之Xcode 相對路徑與絕對路徑

在iOS的工程中,尤其是在使用CocoaPods前,經(jīng)常會把某個靜態(tài)庫或者Framework直接拖到工程中,編譯運(yùn)行通過,這樣就可以了么?

一般我們在xcode里面配置包含工程目錄下頭文件的時候,都要關(guān)聯(lián)著相對路徑和絕對路徑,如果只是自己用這個項(xiàng)目,用絕對路徑的問題不大,但是如果你把工程發(fā)給別人,別人就要在改這個絕對路徑,這時候絕對路徑的缺點(diǎn)立馬出現(xiàn)。

Xcode用戶可以 通過Header Search Paths 來配置環(huán)境變量。但這里涉及到一個另外一個參數(shù) User Header Search Paths, 這兩者到底有什么區(qū)別呢?

首先明確一點(diǎn),Header Search Paths 顧名思義就是用來存放 Project 中頭文件的搜索根源,沒有被add到項(xiàng)目里的頭文件,可以通過配置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這個選項(xiàng)的時候使用
"$(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)代表的是項(xiàng)目根目錄下
$(PROJECT_DIR)代表的是整個項(xiàng)目
./也表示當(dāng)前工程文件夾
../表示上層目錄

以上相對路徑后面拼接的必須是項(xiàng)目中真實(shí)文件夾名,工程內(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),那么項(xiàng)目中引用該文件的寫法為#import "libs/test.h"
如果在Header Search Paths中添加$(SRCROOT)/libs, 那么項(xiàng)目中引用該文件的寫法為#import "test.h"

2. Other Linker Flags:“-ObjC”

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,563評論 19 139
  • 一般我們在xcode里面配置包含工程目錄下頭文件的時候,都要關(guān)聯(lián)著相對路徑和絕對路徑,如果只是自己用這個項(xiàng)目,用絕...
    心有琳鑫閱讀 12,635評論 0 15
  • 有時候更新了APP之后,發(fā)現(xiàn)了一個問題,上傳附件的時候一直報錯 No such file or directo...
    劉應(yīng)閱讀 841評論 0 1
  • #include #include 是預(yù)處理指令,在編譯之前的預(yù)處理期執(zhí)行。它的作用是將引入文件中的內(nèi)容拷貝到當(dāng)前...
    寒咯閱讀 3,712評論 0 10
  • CocoaPods安裝 tags:教程 CocoaPods是什么? 安裝步驟 配置項(xiàng)目 最后一行 end③ 退出保...
    681916139107閱讀 547評論 0 2

友情鏈接更多精彩內(nèi)容