海湾合作委员会提供-I-
选项,其中-I
之前的目录-I-
搜索引用的包含(#include "foo.h"
), and -I
以下目录-I-
搜索括号内的包含(#include <foo.h>
),以及其他引用的内容之后。
-I-
还有一个非常重要的作用。它删除了源文件的目录#include
位于默认搜索路径中。通常,引用的包含总是搜索源文件的目录,并搜索它before any -I
或其他目录。-I-
因此,您可以通过删除默认路径(否则会优先考虑)来按照您想要的顺序准确指定引用的包含文件的位置。
听起来我回答了我的问题,是吗?不,当我使用时-I-
现在,我得到了这个令人讨厌的图:
cc1: note: obsolete option -I- used, please use -iquote instead
问题是-iquote
does not从搜索路径中删除当前目录。无论我提供什么,它仍然总是首先被搜索-iquote
.
所以问题是:如何获得与-I-
,不使用-I-
,它已被弃用并最终会消失?
详细说明:
假设文件布局如下:
srcdir/
configure
file1.c
file2.c
config.h
builddir/
Makefile
file1.o
file2.o
config.h
libpudding.a
由于种种原因,我们无法删除config.h
from srcdir
(它将影响其他平台上的构建过程)。但是,我们希望包括config.h
from builddir
优先于zconf.h
in srcdir
.
这可以通过 GCC 来完成-I-
旗,但否则似乎不可能。
更新的问题:
好吧,看来 GNU CC 开发人员已弃用-I-
,但没有提供替代方法来实现其功能。所以我更新的问题是:引起开发人员注意的最有效方法是什么,这样很有可能-I-
未弃用(我认为这是最可取的,因为它是一种非常优雅的方式来处理指定搜索,比 -iquotexxx 更优雅且不那么丑陋),或者提供某种方式从引用的包含中删除当前目录搜索路径?