2010-04-05 46 views
12

如果我想包含要搜索的頭文件的目錄,這是首選方法,爲什麼?-I dir vs. -isdir dir

+0

包含或不包含主機標準C庫? – 2010-04-05 16:42:51

+0

也不是那個,也不是另一個。只需閱讀GCC手冊中有關預處理選項的信息,就可以瞭解這兩者。 – helpermethod 2010-04-06 08:54:06

回答

7

gcc documentation for -I

目錄dir添加到目錄列表的頭部要搜索的頭文件。這可以用來覆蓋系統頭文件,替換你自己的版本,因爲這些目錄是在系統頭文件目錄之前被搜索到的。但是,您不應該使用此選項來添加包含供應商提供的系統頭文件的目錄(使用-isystem)。如果您使用多個-I選項,則按照從左到右的順序掃描目錄;標準系統目錄在後面。

如果標準系統包含目錄或使用-isystem指定的目錄,也使用-I指定,則-I選項將被忽略。該目錄仍將被搜索,但作爲系統目錄在系統包含鏈中的正常位置。這是爲了確保GCC的程序修復buggy系統頭文件和include_next指令的順序不會被無意中改變。如果您確實需要更改系統目錄的搜索順序,請使用-nostdinc和/或-isystem選項。

因此-I可能是指定頭文件位置的首選選項,除了特殊情況(如供應商提供的系統頭文件)。

1

您應該使用-I指定標題的位置。

用-isystem指定的文件將在-I處理後進行搜索,並通過gcc(與標準系統標頭相同)接收特殊處理。

16

查看此操作的一種方法是使用您使用-I控制的標題和不包含(系統,第三方庫)的標題與-isystem。實際的區別來自於警告被啓用時,來自-isystem標題的警告將被抑制。

0

當您使用-I包含標題「Myheader.h」時,編譯器會生成搜索順序:「Myheader.h」,「system/headers」。所以如果在「MyHeader.h」中找不到「system/headers」中的內容。但是,當你使用-isystem時,你基本上是說用我給你的任何東西替換「system/headers」。所以在「系統/頭文件」中不會再出現問題。