让我们假设在first.h
我们#include "aaa/second.h"
并在aaa/second.h
我们有#include "bbb/third.h"
。我认为,如果“third.h”不在“aaa/bbb”中,编译器会在“默认设置”中发出抱怨。是否可以强制编译器使用“working”目录的名称来构建包含所有全名?
是否有可能以这种方式改变这种行为:first.cpp
所在的目录用于构建全部包含的全名?例如,如果“first.h”位于'/ home/bucky /'中,则#include "bbb/third.h"
(来自“aaa/second.h”)应该被解释为/home/bucky/bbb/third.h
而不是/home/bucky/aaa/bbb/third.h
。
编辑
我不能改变整个源代码。在代码中使用引号而不是尖括号。
我编译在命令行上使用g++ -std=c++0x name.cpp -o name
。我在两个不同的终端做。它看起来像在第一个终端工作目录用来构造全名,在第二个终端,情况并非如此。我几乎可以肯定,它是由于环境变量而发生的,但我不知道哪些变量。所以,我的问题是,在更大程度上,什么样的环境变量可以强制编译器使用工作目录来构造全名。
EDIT 2
在我TEST.CPP文件I包括 “first.h”。这个包含不会导致任何问题(编译器会看到“first.h”)。 “first.h”文件包含“ppp/second.h”。这也没有问题。但是“ppp/second.h”包含“ppp/third.h”,这是问题出现的地方。我认为问题的原因是“second.h”试图在second.h所在目录的“ppp”子目录中找到“third.h”。换句话说,second.h试图在“ppp/ppp”子目录中找到third.h(因为second.h位于ppp子目录中)。
在另一终端中,相同的编译命令,在同一目录中不会引起任何问题。其原因显然在于环境变量的价值。
你错过任何引号或尖括号在你的第二个'#include'。 – 2013-03-19 10:17:12
@Kerrek SB,谢谢。我需要引号。 – Roman 2013-03-19 10:20:07