linux - 我如何在 Makefile 中获取用户名?

标签 linux makefile installation home-directory

我正在为 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/

相关文章:

Linux 定义自定义 Shell 命令?

linux - 比较 IP 或使用 CIDR 通知生成 IP Linux

android - 在 Android 中收听应用程序安装/升级的广播消息

linux - 多个参数,带参数的字符串

linux - 如何理解 "__xchg"函数中的内联汇编?

java - javac的Makefile编译问题

java - 使用 ANTLR 语法编译文件

c++ - Makefile 不适用于 mac os x Mavericks

objective-c - 如何在 Objective-C Xcode 包中的每个单元测试之前实现 setup() 和teardown()?

java - 如何设置我的应用程序?