【问题标题】:How to set priority of conflicting headers c++如何设置冲突标头c ++的优先级
【发布时间】:2012-12-28 10:45:35
【问题描述】:

假设您在两个不同的目录中有两个 something.h。您不能写入这些目录,也没有 root 访问权限。

你有这样的代码:

#include <something.h>

您如何指定在特定目录中使用 something.h 而忽略另一个?

【问题讨论】:

  • 轰隆隆!增加了 20%!

标签: c++ compilation header


【解决方案1】:

尝试使用:
#include "../directory/something.h"
请注意,GCC 使用 Search Path 查找标头。
您也可以要求 GCC 在指定目录中查找头文件。使用-iquote dir,将目录dir添加到要搜索头文件的目录列表的头部。

【讨论】:

【解决方案2】:

通常,有资格搜索被认为是系统包含的目录列表(使用#include 中的尖括号)作为一组-I 开关提供给编译器。这些包含目录通常在 makefile 或项目文件中指定。

许多(但不一定是所有)编译器将尊重列为包含目录的目录顺序 - 因此您应该能够通过更改 makefile 中的顺序来选择您的偏好。但是,在某些编译器中这可能会很困难,因为某些目录被认为总是包含在内(例如 gcc 默认假定您包含 /usr/include)。 换句话说,这是非常具体的实现。

如果你使用的不是尖括号,而是双引号,那么你可以直接指定你想要的文件,比如#include "dir/file.h"

【讨论】:

  • 一个版本在 /usr/include/foo/ ...另一个在我的主目录中。当我使用#include "fullpath to home directory header" 指定时,它仍然选择/usr/include 一个
  • @madreblu 您是否也尝试使用-I 选项?
  • 是的,即使使用 -I,它仍然会查看 /usr/include/foo/ 一个
  • @madreblu:尝试使用 #include 作为 .cpp 文件的第一行。否则,该标头可能会被其上方的另一个#include 拉动
  • 关于 mvp 链接​​的文档中的默认目录的注释:-I 目录优先于它们。但是,您不能使用-I 标志重新排列默认目录的顺序。您必须使用-nostdinc 忽略所有默认值,然后按您想要的顺序使用-I 它们,或者您可以将所需的标头链接到非默认目录并使用-I
猜你喜欢
  • 2014-07-23
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多