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。