GCC目录选项--isystem

Aqu*_*irl 16 gcc

从以下链接:http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html

如果标准系统包含目录或使用-isystem指定的目录,也使用-I指定,则将忽略-I选项.该目录仍将被搜索,但作为系统目录在系统中的正常位置包括链.

这是怎么回事?

[14:45:37 Wed Apr 27] ~/junkPrograms/src  $gcc hello.c -isystem -I ../include/
../include/: file not recognized: Is a directory
collect2: ld returned 1 exit status
[14:45:42 Wed Apr 27] ~/junkPrograms/src  $gcc hello.c -I isystem ../include/
../include/: file not recognized: Is a directory
collect2: ld returned 1 exit status
[14:45:57 Wed Apr 27] ~/junkPrograms/src  $
Run Code Online (Sandbox Code Playgroud)

这是否意味着如果附加-isystem,dir将被赋予正常系统目录的优先级?

unw*_*ind 25

文件说:

-isystem目录

在-I指定但在标准系统目录之前的所有目录之后搜索dir以查找头文件.将其标记为系统目录,以便获得与应用于标准系统目录相同的特殊处理.如果dir以=开头,那么=将被sysroot前缀替换; 看--sysroot和-isysroot.

所以你错了.您需要为-isystem选项本身指定一个目录,它不像您似乎正在尝试的-I选项的"修饰符"那样工作.

我相信你的命令应该是:

$ gcc -isystem ../include hello.c
Run Code Online (Sandbox Code Playgroud)

系统标题得到警告的特殊处理(因为它们是只读的,有些不能用严格符合的代码编写)