修改包含文件的搜索路径

4
我的开发环境是这样的,我在/usr/include/another/directory中都有some_header.h/another/directory中包含了我需要在程序中包含的一些头文件,但我想使用来自/usr/includesome_header.h。当我使用时,请注意:
 gcc ... -I/another/directory

gcc使用/another/directory/some_header.h。如果我使用

 gcc ... -I/usr/include -I/another/directory

gcc也是这样做的,因为它忽略了/usr/include,因为它是标准搜索路径的一部分,但它会在使用-I包含的非标准目录之后进行搜索。

有什么想法吗?


我的答案被毁了,我弄反了。 - Kim Gräsman
3个回答

8

使用-iquote开关:

使用引号包含在another/directory中的文件:

#include "another_file.h"

然后使用。
gcc -iquote /another/include ...

为引用的包含文件添加搜索路径。该开关将添加一个目录,在当前目录和-I和系统包含路径之后,用于搜索引用的包含文件。
使用括号包含您的其他包含文件(例如:#include <header.h>)。
有关更多信息,请参见此处: Ubuntu Linux、GCC中包含文件存储在哪里

这似乎离成功很近,但事实证明/another/directory中的文件使用#include<file.h>,因此当我使用-iquote时,它们找不到包含文件。 - Dan Hook
1
嗯,这很奇怪。预处理器仍应在-I和系统包含路径中搜索<file.h>。对我来说似乎可以工作。 - Karl Voigtland

5
你看过 -nostdinc 吗?
手册上说:
-nostdinc 不要在标准系统目录中搜索头文件。只搜索你用 -I 选项指定的目录(以及当前文件所在的目录,如果适用)。
当然这意味着你需要明确指定那些通常位于标准搜索路径上的内容,而你确实需要的内容也在其中...

0

你尝试过取消设置系统INCLUDE路径环境变量吗?


好的,它是空的,但这并不重要。无论环境变量如何,gcc自动查找特定目录。http://gcc.gnu.org/onlinedocs/gcc-4.1.1/cpp/Search-Path.html#Search-Path - Dan Hook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接