【问题标题】:Is this a good way to be root in a makefile?这是在makefile中成为root的好方法吗?
【发布时间】:2009-09-20 17:20:36
【问题描述】:

这是在 makefile 中成为 root 的好方法吗?

外壳 = /bin/sh 安装目录 = /usr/bin/ OBJS = main.o file.o gen.o stat.o 程序1:$(OBJS) gcc -o program1 $(OBJS) main.o:main.c 文件.h gen.h stat.h gcc -c main.c 文件.o:文件.c 文件.h gcc -c 文件.c gen.o:gen.c gen.h gcc -c gen.c stat.o:stat.c stat.h gcc -c stat.c 干净的: rm -f $(OBJS) 程序1 安装: @if [ -f 程序 1 ];然后 \ 如果 [ $$(id -u) -eq 0 ];然后 \ cp program1 $(INSTDIR) && \ echo "安装在 $(INSTDIR)" ; \ 别的 \ (sudo cp program1 $(INSTDIR) 2> /dev/null && \ echo "安装在 $(INSTDIR)") || \ (echo '这台机器上没有 sudo,正在尝试 su。' \ && su -c "cp program1 $(INSTDIR)" && \ echo "安装在 $(INSTDIR)") ; \ 菲; \ 别的 \ echo "没有要安装的程序,运行make。" ; \ 菲 卸载: @if [ -f $(INSTDIR)program1 ];然后 \ 如果 [ $$(id -u) -eq 0 ];然后 \ rm $(INSTDIR)program1 && \ echo "卸载在 $(INSTDIR)" ; \ 别的 \ (sudo rm $(INSTDIR)program1 2> /dev/null && \ echo "在 $(INSTDIR) 中卸载") || \ (echo '这台机器上没有 sudo,正在尝试 su。' \ && su -c "rm $(INSTDIR)program1" && \ echo "卸载在 $(INSTDIR)") ; \ 菲; \ 别的 \ echo "没有要删除的程序。" ; \ 菲

【问题讨论】:

  • 如果您坚持自己编写规则,请使用 DESTDIR 而不是 INSTDIR,因为它更标准。

标签: c makefile


【解决方案1】:

不!

首先,一般用户使用sudo make install。其次,您没有考虑将程序安装到自定义目录中的情况,该目录并不总是需要 root 权限。例如,打包工具使用此功能,它们没有 root 权限。

【讨论】:

  • 不是“不需要 root 权限”,如果安装程序有这些权限,则有害。普通用户可能无法编辑和/或访问已安装的文件。
猜你喜欢
  • 2011-10-01
  • 2017-08-09
  • 1970-01-01
  • 2011-05-04
  • 2012-06-02
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多