私の .cpp プロジェクトのこの奇妙な動作について、私はかなり混乱しています。次のフォルダー構造があります。
include/mylib.h
myproject/src/eval.cpp
myproject/data/file.csv
myproject/Makefile
eval.cpp には、次のように mylib.h を含めます。
#include "../../include/mylib.h"
Makefile を使用してコンパイルします。
all:
g++ -I include ../include/mylib.h src/eval.cpp -o eval.out
今、私の eval.cpp で、データディレクトリから file.csv を読んでいます。このように参照すると
../data/file.csv
それは見つかりません(常に空の行を取得します)が、これは
data/file.csv
正常に動作します。
したがって、mylib.h をインクルードするには、(src フォルダーから) 2 つ上のディレクトリに移動します。これは正しいようです。しかし、同じコードから別のファイルを参照するために、プロジェクト ディレクトリにいると仮定するのは意味がありません。なんとなく Makefile とつながっているのだろうと思いますが、よくわかりません。
なぜそうなのですか?
EDIT:私が試したいくつかのことの後、使用されるパスはバイナリの場所からデータの場所へのパスではないようですが、バイナリを実行する場所にも依存します。つまり、bin ディレクトリにバイナリがあり、次のように実行した場合:
./bin/eval.out
で動作しdata/file.csv
ます。
これ:
cd bin
./eval.out
で動作し../data/file.csv
ます。
プログラムをどこから実行するかによって、異なる出力が得られるため、非常に混乱しているように思えます。この動作の理由と、それが正常なのか、それとも私が間違いを犯しているのかを詳しく説明してもらえますか?