9

我正在为 Ubuntu 制作一个简单的游戏并更新高分列表,它在运行时需要一个名为“highscores.bin”的文件。

我想把这个文件放在

/home/(USER)/.game_name

我进行了一些研究,发现从 Makefile 中我可以获取环境变量 $USER。因此,在 Makefile 中,在“安装”目标处,我添加了:

mkdir -p $(DESTDIR)home/$$USER/.game_name

但是当我运行“sudo make install”时,Makefile 将其安装为:

/home/root/.game_name

如何在 Makefile 中获取(非 root)用户名?

PS:我正在手动编写Makefile。没有 ./config

PS2:我不想做

mkdir -p ~/.game_name

因为如果我想安装到临时目录,我希望能够更改 DESTDIR。

4

2 回答 2

14

好吧,如果您在运行时需要该文件,我建议您在运行时创建它。Makefile 仅在编译时考虑。如果程序被编译然后由不同的用户执行,这显然是一个问题,其中一些甚至可能在编译时不存在。

在运行时,您可以获得此处所示的主目录(如果您使用的是 C/C++)。然后,您可以检查高分文件夹/文件是否存在,并在需要时创建它。如果你想要一个所有用户的高分文件,你应该把它放在一个特殊用户的主目录中,而不是放在文件系统的其他地方。这例如由游戏 xjump 完成。

关于您的 Makefile,由于sudo命令 on

须藤使安装

实际运行 make 的用户是超级用户:root。

于 2011-11-22T22:53:21.447 回答
5

您想为每个用户安装您的程序吗?因此,最好在用户运行游戏时创建/home/user/.game_name目录,而不是在 root 安装时创建。否则,只有打电话的用户sudo make install才会有它的高分列表。如果您只有一个用户,请不要将其安装在系统范围内,而是安装在用户目录中。

我建议在游戏第一次运行时初始化用户文件。所以每个用户,即使是安装游戏时不存在的用户,都可以拥有自己的高分榜。您可以将初始化代码添加到您的游戏中(c++、java 或其他任何东西),或者只是调用执行它的外部脚本(不是那么优雅)。避免在安装时创建与用户相关的文件。

于 2011-11-22T22:53:34.200 回答