操作包含文件的搜索路径

Posted

技术标签:

【中文标题】操作包含文件的搜索路径【英文标题】:Manipulating the search path for include files 【发布时间】:2010-11-17 11:11:29 【问题描述】:

我的开发环境是这样的,我在/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. 包含的非标准目录之后进行搜索

有什么想法吗?

【问题讨论】:

杀死了我的答案,我把它倒退了。 【参考方案1】:

使用 -iquote 开关:

使用引号包含 另一个/目录 中的文件:

#include "another_file.h"

然后使用

gcc -iquote /another/include ...

为引用的包含文件添加搜索路径。此开关将在当前目录之后和 -I 和系统包含路径之前添加一个用于搜索引用的包含文件的目录。

使用括号包含您的其他包含文件(即#include <header.h>)。

请参阅此处了解更多信息: Where are include files stored - Ubuntu Linux, GCC

【讨论】:

这似乎非常接近工作,但事实证明 /another/directory 中的文件使用 #include 所以当我使用 -iquote 时他们找不到它们的包含文件。 嗯,这很奇怪。预处理器仍应在 -I 和系统包含路径中搜索 。似乎对我有用。【参考方案2】:

你看过-nostdinc吗?

手册说:

-nostdinc 不要在标准系统目录中搜索头文件。 只有您使用 -I 选项指定的目录(以及 搜索当前文件的目录(如果适用)。

当然,这意味着 必须指定通常在标准搜索路径上出现的任何内容,而您确实想要...

【讨论】:

【参考方案3】:

您是否尝试过取消设置系统 INCLUDE 路径环境变量?

【讨论】:

嗯,它是空的,但这没关系。 gcc 会自动查找某些目录,而不考虑环境变量。 gcc.gnu.org/onlinedocs/gcc-4.1.1/cpp/…

以上是关于操作包含文件的搜索路径的主要内容,如果未能解决你的问题,请参考以下文章

基于字段的弹性搜索计数查询,其值包含文件系统路径

clang在同一目录中包含多个搜索路径

GCC的头文件搜索路径

makefile : 如何链接来自不同子目录的目标文件并包含不同的搜索路径

在使用 CocoaPods 编译期间包含一个目录作为搜索路径

8.Makefile路径搜索使用案例