如何在Makefile中获取用户名?

kur*_*ure 9 linux install makefile home-directory

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

我希望把这个文件放在

/home/(USER)/.game_name
Run Code Online (Sandbox Code Playgroud)

我研究了一下,发现从Makefile里面我可以得到环境变量$ USER.所以在Makefile中,在'install'目标中,我添加了:

mkdir -p $(DESTDIR)home/$$USER/.game_name
Run Code Online (Sandbox Code Playgroud)

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

/home/root/.game_name
Run Code Online (Sandbox Code Playgroud)

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

PS:我正在手工编写Makefile.没有./configure

PS2:我不想这样做

mkdir -p ~/.game_name
Run Code Online (Sandbox Code Playgroud)

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

Exp*_*Exp 14

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

在运行时,你可以得到主目录,如图这里(如果你使用的是C/C++).然后,您可以检查highscore文件夹/文件是否存在,并在需要时创建它.如果您想为所有用户提供高分文件,则应将其放在特殊用户的主目录中,而不是文件系统中的其他位置.这例如由游戏xjump完成.

关于你的Makefile,由于sudo命令打开 ,$ USER变量被转换为root

sudo make install

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


Ale*_*ato 5

您想为每个用户安装您的程序吗?因此,如果您在用户运行游戏时创建/home/user/.game_name目录,而不是在root用户安装时,则会更好.否则,只有呼叫的用户sudo make install才会拥有高分榜.如果您只有一个用户,请不要在系统范围内安装,而是在用户目录中安装.

我建议在游戏首次运行时初始化用户文件.因此,每个用户,甚至是安装游戏时不存在的用户,都可以获得高分榜.您可以将初始化代码添加到游戏中(c ++,java或其他任何东西),或者只调用执行它的外部脚本(不那么优雅).避免在安装时创建与用户相关的文件.