在編譯時 (嚴格說來是前處理的階段) 除了使用 -I 指定額外的標頭檔資料夾路徑之外,還有 -iquote,
-isystem, -idirafter 可以使用。
利用 -iquote 指定的資料夾路徑,只會在使用 #include "..." (quote form) 型式的引入中被參考,對使用 #include <...> 型式的引入沒有作用。
使用 -I, -isystem, -idirafter 這三種參數指定的資料夾路徑,則會對 #include "..." 與 #include <...> 型式的引入參考皆有影響。
透過 -isystem 指定的資料夾路徑下的標頭檔會被視為 system header 來處理,會有一些特殊待遇。
特殊待遇看起來主要是在警告訊息的處理上,被視為 system header 的標頭檔所產生的警告訊息中,除了特別利用 #warning 所產生的之外,其他都會被抑制掉。
在 GCC 的文件中有提到,利用 -isystem 與 -idirafter 引入的標頭檔都會被視為 system header 來處理,不過在 Clang 的文件中則是只有提到 -isystem 的部份。
這些選項在 GCC 跟 Clang 都有支援,行為看起來大致上是一樣的。
在搜尋順序上,目前只看到 GCC 文件有明確的說是以下的順序,不過 Clang 應該是一樣的:
- (僅限
#include "..."型式) 檔案所在的資料夾路徑 - (僅限
#include "..."型式)-iquote指定的資料夾路徑 -I指定的資料夾路徑-isystem指定的資料夾路徑- 標準系統資料夾路徑
-idirafter指定的資料夾路徑
Reference:
No comments:
Post a Comment