天天看點

Xcode Header Search Paths 與 User Header Search Paths 詳解

https://blog.csdn.net/alan00000/article/details/45921217

https://blog.csdn.net/wangyanchang21/article/details/78813311 

這邊blog 簡單介紹一下 Header Search Paths. 

      根據蘋果文檔(https://developer.apple.com/library/mac/documentation/developertools/Conceptual/XcodeBuildSystem/300-Build_Settings/bs_build_settings.html#//apple_ref/doc/uid/TP40002691-SW5 ),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 中,而 <> 無法從系統目錄空間中找到新加的路徑,進而報錯。

Header Search Paths 就是我們平時使用的, 設定頭檔案搜尋路徑的方法. 可以通過配置Header Search Paths 來引入頭檔案, 進而可以使用該類.

分析

在Xcode->Target->BuildSettings中, 有兩個設定一個是User Header Search Paths, 一個是 Header Search Paths. 其實還有一個廢棄的Always Search User Paths.

Header Search Paths 就是我們平時使用的, 設定頭檔案搜尋路徑的方法. 可以通過配置Header Search Paths 來引入頭檔案, 進而可以使用該類.

差別

Header Search Paths 和 User Header Search Paths 是具有同樣功能的, 差別在于 import 或者 include 頭檔案時, Header Search Paths 會多一種方式.

當import時, 有兩種方式:

#import <SomeClass.h>

#import "SomeClass.h"

1

2

若在Header Search Paths中設定SomeClass的路徑後, 上面兩種方式都可以使用. 但在User Header Search Paths中設定後, #import <SomeClass.h> 會編譯報錯.

根本差別在于, 前者生成類似“-I path/to/header”的編譯選項,後者生成類似“-iquote path/to/header”.

擴充

其實還有另一個很相似的設定Always Search User Paths, 

如果出現上面這樣的錯誤, 這時把Always Search User Paths設定成Yes,強制也import<> 也在User Header Search Paths搜尋。

不過Always Search User Paths這個變量已經過時了,目前還存在隻是為了向後相容,預設值都是被設定為NO。

iOS