我对我的 .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 文件夹),这似乎是正确的。但是对我来说,从假定我们在项目目录中的同一段代码中引用另一个文件是没有意义的。我想它以某种方式与 Makefile 相关,但我不确定。
为什么会这样?
编辑:在我尝试了几件事之后,似乎使用的路径不是从二进制位置到数据位置的路径,而是取决于我从哪里运行二进制文件。即,如果我在 bin 目录中有二进制文件并像这样运行它:
./bin/eval.out
它适用于data/file.csv
.
这个:
cd bin
./eval.out
与../data/file.csv
.
现在对我来说似乎很困惑,因为取决于我从哪里运行程序会给出不同的输出。谁能详细说明这种行为的原因,如果这是正常的还是我犯了一些错误?