XCode項目設置引入頭文件路徑之絕對路徑(系統路徑)/相對路徑

iOS開發之 相對路徑與絕對路徑

 https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html

在iOS的工程中,尤其是在使用CocoaPods前,經常會把某個靜態庫或者Framework直接拖到工程中,編譯運行通過,這樣就可以了麼? 一般我們在xcode裏面配置包含工程目錄下頭文件的時候,都要關聯着相對路徑和絕對路徑,如果只是自己用這個項目,用絕對路徑的問題不大,但是如果你把工程發給別人,別人就要在改這個絕對路徑,這時候絕對路徑的缺點立馬出現。

     XCode用戶可以 通過Header Search Paths 來配置環境變量。但這裏涉及到一個另外一個參數 User Header Search Paths, 這兩者到底有什麼區別呢?   

  首先明確一點,Header Search Paths 顧名思義就是用來存放 Project 中頭文件的搜索根源,沒有被add到項目裏的頭文件,可以通過配置Header Search Paths 來引入頭文件,這樣的好處可以不讓project 包含的文件太多,便於管理。

     淺顯一點的區別是,編碼時候通過 #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 中,而 <> 無法從系統目錄空間中找到新加的路徑,從而報錯。

 

所以在修改User Header Search Paths這個選項的時候使用

"$(SRCROOT)/當前工程名字/需要包含頭文件所在文件夾"

將上面的雙引號裏面的字符串拷貝之後,你會發現這個“$(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

 以上原文轉載自http://www.cnblogs.com/muyushifang07/p/4460688.html

感謝作者沐雨十方07 ”的原創。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章