first.h
私たちが持っていると私たちが持っている#include "aaa/second.h"
と仮定しましょaaa/second.h
う#include "bbb/third.h"
。「デフォルト設定」では、「third.h」が「aaa/bbb」にない場合にコンパイラが文句を言うと思います。
が配置されているディレクトリを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
コマンドラインでを使用してコンパイルします。私は2つの異なる端末でそれを行います。最初の端末では作業ディレクトリがフルネームの作成に使用されているように見えますが、2番目の端末ではそうではありません。私はそれが環境変数のために起こることをほぼ確信していますが、どれがどれかはわかりません。ですから、私の質問は、大体において、どの環境変数がコンパイラに作業ディレクトリを使用してフルネームを構築させることができるかということです。
編集2
test.cppファイルに「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サブディレクトリにあるため)。
別の端末では、同じディレクトリにある同じコンパイルコマンドで問題は発生しません。その理由は、明らかに環境変動の価値にあります。