【发布时间】:2015-04-17 08:45:35
【问题描述】:
我有以下文件夹结构:
include/
src/
data/
binary-file
makefile
我会像这样执行二进制文件:./binary-file
但现在我希望我的二进制文件在它自己的文件夹中,如下所示:
bin/ <- binary-file is in here now
include/
src/
data/
makefile
当我从主文件夹执行它时一切正常:bin/binary-file
但是如果我在主文件夹以外的另一个文件夹中,程序将表现不佳,并且无法找到#include 的路径。例如,如果我在 bin/ 文件夹中,如果我像这样执行它,程序将表现不佳:./binary-file
我的问题是:如何让我的 makefile 或二进制文件像在主文件夹中一样从系统上的任何位置执行?
在我的 makefile 中,我所做的只是:
$(CC) $(CFLAGS) -I$(IDIR) -I$(BDIR) -I$(DDIR) -o $(PROG) $^ $(LFLAGS)
到
$(CC) $(CFLAGS) -I$(IDIR) -I$(BDIR) -I$(DDIR) -o $(BDIR)/$(PROG) $^ $(LFLAGS)
【问题讨论】:
-
您的 makefile/编译与此无关。您的二进制文件需要能够通过绝对路径或通过其已知目录结构中的相对路径找到其数据文件。
-
@EtanReisner 这是否意味着我必须将所有#include "file.h" 更改为 #include "../file.h"?
-
编译器使用这些路径而不是您的二进制文件。不,那些
-I参数应该没问题,假设IDIR是你的include目录的路径。 -
一旦你的程序被编译成可执行文件,包含文件(你用
#include file.h包含的那些是完全没有意义的。我强烈怀疑你在混淆事情。你是混淆了编译结果的执行还是执行make来构建最终产品? -
@thurizas 我的 DDIR 中有一些我的二进制文件使用的数据(“data/xml/file.xml”)。当我从主文件夹执行二进制文件时:/bin/binary-file,一切正常。但是当我从 /bin/ 文件夹执行二进制文件:./binary-file 时,它无法加载“data/xml/file.xml”。