C Linux/Makefile:创建一个二进制文件,它的执行就像它在一个特定的目录中一样
我有以下文件夹结构:C Linux/Makefile:创建一个二进制文件,它的执行就像它在一个特定的目录中一样,c,linux,makefile,C,Linux,Makefile,我有以下文件夹结构: include/ src/ data/ binary-file makefile 我会像这样执行二进制文件:./binary文件 但现在我希望我的二进制文件在它自己的文件夹中,如下所示: bin/ <- binary-file is in here now include/ src/ data/ makefile 到 您的数据文件名必须是。/data/xml/file.xml“ 。/“是一个相对路径,表示“返回一个文件夹”“../../etc”意味着返回两个文件夹
include/
src/
data/
binary-file
makefile
我会像这样执行二进制文件:./binary文件
但现在我希望我的二进制文件在它自己的文件夹中,如下所示:
bin/ <- binary-file is in here now
include/
src/
data/
makefile
到
您的数据文件名必须是
。/data/xml/file.xml“
。/“
是一个相对路径,表示“返回一个文件夹”“../../etc”
意味着返回两个文件夹。您的数据文件名必须是。/data/xml/file.xml”
。/“
是一个相对路径,表示“返回一个文件夹”“../../etc”
意味着返回两个文件夹。您的数据文件名必须是。/data/xml/file.xml”
。/“
是一个相对路径,表示“返回一个文件夹”“../../etc”
意味着返回两个文件夹。您的数据文件名必须是。/data/xml/file.xml”
。/“
是一个相对路径,表示“返回一个文件夹”<代码>“../../etc”意味着返回两个文件夹。可能您问了一个错误的问题:构建系统与程序执行无关
然而,如果您想找到一个答案,如何使我的程序正确使用数据,这是相对于程序安装的位置,这里是一个答案
当执行程序main
时,它将二进制路径作为第一个参数(索引0
)。该路径可以是相对路径,也可以是绝对路径,但在任何情况下,它都允许您查找基本目录
这些也是有用的链接:
#include <linux/limits.h>
#include <stdio.h>
#include <string.h>
#include <libgen.h>
int main(int argc, char *argv[])
{
char datadir[PATH_MAX];
strncpy(datadir, argv[0], sizeof(datadir));
dirname(datadir);
strncat(datadir, "/../data", sizeof(datadir));
printf("Data dir: %s\n", datadir);
return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
char datadir[PATH_MAX];
strncpy(datadir,argv[0],sizeof(datadir));
dirname(datadir);
strncat(datadir,“/../data”,sizeof(datadir));
printf(“数据目录:%s\n”,datadir);
返回0;
}
该计划假定以下部署:
ROOT <- Can be anywhere on file system
+--bin
| +--- <- application is here...
+--data
+--- <- Data files are located here...
ROOT您可能问了一个错误的问题:构建系统与程序执行无关
然而,如果您想找到一个答案,如何使我的程序正确使用数据,这是相对于程序安装的位置,这里是一个答案
当执行程序main
时,它将二进制路径作为第一个参数(索引0
)。该路径可以是相对路径,也可以是绝对路径,但在任何情况下,它都允许您查找基本目录
这些也是有用的链接:
以下是如何使用第一个参数:
#include <linux/limits.h>
#include <stdio.h>
#include <string.h>
#include <libgen.h>
int main(int argc, char *argv[])
{
char datadir[PATH_MAX];
strncpy(datadir, argv[0], sizeof(datadir));
dirname(datadir);
strncat(datadir, "/../data", sizeof(datadir));
printf("Data dir: %s\n", datadir);
return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
char datadir[PATH_MAX];
strncpy(datadir,argv[0],sizeof(datadir));
dirname(datadir);
strncat(datadir,“/../data”,sizeof(datadir));
printf(“数据目录:%s\n”,datadir);
返回0;
}
该计划假定以下部署:
ROOT <- Can be anywhere on file system
+--bin
| +--- <- application is here...
+--data
+--- <- Data files are located here...
ROOT您可能问了一个错误的问题:构建系统与程序执行无关
然而,如果您想找到一个答案,如何使我的程序正确使用数据,这是相对于程序安装的位置,这里是一个答案
当执行程序main
时,它将二进制路径作为第一个参数(索引0
)。该路径可以是相对路径,也可以是绝对路径,但在任何情况下,它都允许您查找基本目录
这些也是有用的链接:
以下是如何使用第一个参数:
#include <linux/limits.h>
#include <stdio.h>
#include <string.h>
#include <libgen.h>
int main(int argc, char *argv[])
{
char datadir[PATH_MAX];
strncpy(datadir, argv[0], sizeof(datadir));
dirname(datadir);
strncat(datadir, "/../data", sizeof(datadir));
printf("Data dir: %s\n", datadir);
return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
char datadir[PATH_MAX];
strncpy(datadir,argv[0],sizeof(datadir));
dirname(datadir);
strncat(datadir,“/../data”,sizeof(datadir));
printf(“数据目录:%s\n”,datadir);
返回0;
}
该计划假定以下部署:
ROOT <- Can be anywhere on file system
+--bin
| +--- <- application is here...
+--data
+--- <- Data files are located here...
ROOT您可能问了一个错误的问题:构建系统与程序执行无关
然而,如果您想找到一个答案,如何使我的程序正确使用数据,这是相对于程序安装的位置,这里是一个答案
当执行程序main
时,它将二进制路径作为第一个参数(索引0
)。该路径可以是相对路径,也可以是绝对路径,但在任何情况下,它都允许您查找基本目录
这些也是有用的链接:
以下是如何使用第一个参数:
#include <linux/limits.h>
#include <stdio.h>
#include <string.h>
#include <libgen.h>
int main(int argc, char *argv[])
{
char datadir[PATH_MAX];
strncpy(datadir, argv[0], sizeof(datadir));
dirname(datadir);
strncat(datadir, "/../data", sizeof(datadir));
printf("Data dir: %s\n", datadir);
return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
char datadir[PATH_MAX];
strncpy(datadir,argv[0],sizeof(datadir));
dirname(datadir);
strncat(datadir,“/../data”,sizeof(datadir));
printf(“数据目录:%s\n”,datadir);
返回0;
}
该计划假定以下部署:
ROOT <- Can be anywhere on file system
+--bin
| +--- <- application is here...
+--data
+--- <- Data files are located here...
ROOTOK,基于您最近的commnet
@thurizas我的DDIR中有一些二进制文件使用的数据(“data/xml/file.xml”)。当我从主文件夹:/bin/binary文件执行二进制文件时,一切正常。但是当我从/bin/文件夹执行二进制文件时:./binary文件无法加载“data/xml/file.xml”
硬编码数据文件的绝对路径(例如/home/brandon/projects/data/xml/file.xml……假设是*nix类型的文件系统)。显然,好处是,无论可执行文件位于何处,它都可以找到数据文件。不利的一面是,如果你移动二进制文件,它将停止工作
添加命令行选项以设置数据路径。例如,假设您选择应用程序数据文件的默认位置为/usr/share/brandon/myapp/data
,您可以将其硬编码到应用程序中。现在允许用户使用命令行参数来调整文件的位置。你的逻辑是如果com