2010-04-05 44 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”。所以在“系统/头文件”中不会再出现问题。