讓我們假設在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