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