【发布时间】:2012-12-28 10:45:35
【问题描述】:
假设您在两个不同的目录中有两个 something.h。您不能写入这些目录,也没有 root 访问权限。
你有这样的代码:
#include <something.h>
您如何指定在特定目录中使用 something.h 而忽略另一个?
【问题讨论】:
-
轰隆隆!增加了 20%!
标签: c++ compilation header
假设您在两个不同的目录中有两个 something.h。您不能写入这些目录,也没有 root 访问权限。
你有这样的代码:
#include <something.h>
您如何指定在特定目录中使用 something.h 而忽略另一个?
【问题讨论】:
标签: c++ compilation header
尝试使用:#include "../directory/something.h"
请注意,GCC 使用 Search Path 查找标头。
您也可以要求 GCC 在指定目录中查找头文件。使用-iquote dir,将目录dir添加到要搜索头文件的目录列表的头部。
【讨论】:
通常,有资格搜索被认为是系统包含的目录列表(使用#include 中的尖括号)作为一组-I 开关提供给编译器。这些包含目录通常在 makefile 或项目文件中指定。
许多(但不一定是所有)编译器将尊重列为包含目录的目录顺序 - 因此您应该能够通过更改 makefile 中的顺序来选择您的偏好。但是,在某些编译器中这可能会很困难,因为某些目录被认为总是包含在内(例如 gcc 默认假定您包含 /usr/include)。
换句话说,这是非常具体的实现。
如果你使用的不是尖括号,而是双引号,那么你可以直接指定你想要的文件,比如#include "dir/file.h"。
【讨论】:
#include "fullpath to home directory header" 指定时,它仍然选择/usr/include 一个
-I 选项?
#include 作为 .cpp 文件的第一行。否则,该标头可能会被其上方的另一个#include 拉动
-I 目录优先于它们。但是,您不能使用-I 标志重新排列默认目录的顺序。您必须使用-nostdinc 忽略所有默认值,然后按您想要的顺序使用-I 它们,或者您可以将所需的标头链接到非默认目录并使用-I。