我正在为 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)用户名?
P.S.:我正在手写 Makefile。没有./configure
P.S.2:我不想做
mkdir -p ~/.game_name
因为如果我想安装到临时目录,我希望能够更改 DESTDIR。
最佳答案
好吧,如果您在运行时需要该文件,我建议您在运行时创建它。 Makefile 仅在编译时被考虑。如果程序被编译然后由不同的用户执行,这显然是一个问题,其中一些甚至在编译时可能不存在。
在运行期间,您可以获得主目录,如图所示here (如果您使用的是 C/C++)。然后您可以检查高分文件夹/文件是否存在,并在需要时创建它。如果你想要一个所有用户的高分文件,你应该把它放在一个特殊用户的主目录中,而不是文件系统中的其他地方。例如,这是由游戏 xjump 完成的。
关于您的 Makefile,由于 sudo 命令,$USER 变量被转换为 root
sudo make install
实际运行make的用户是 super 用户:root。
关于linux - 我如何在 Makefile 中获取用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234975/