这是植根于makefile中的好方法吗?

shell = / bin / sh
INSTDIR = / usr / bin /
OBJS = main.o file.o gen.o stat.o

程式1:$(OBJS)
gcc -o program1 $(OBJS)

main.o:main.c file.h gen.h stat.h
gcc -c main.c

file.o:file.c file.h
gcc -c file.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 program1];然后 \
如果[$$(id -u)-eq 0];然后 \
cp程序1 $ {INSTDIR)&& \
echo“已安装在$(INSTDIR)中”; \
其他\
(sudo cp program1 $ {INSTDIR)2> / dev / null && \
回声“安装在$(INSTDIR)”)|| \
(回显“此机器上没有sudo,请尝试su。” \
&& su -c“cp program1 $(INSTDIR)” && \
回声“安装在$(INSTDIR)”); \
fi; \
其他\
echo“没有要安装的程序,请运行make。” ; \
科幻

卸载:
@if [-f $(INSTDIR)program1];然后 \
如果[$$(id -u)-eq 0];然后 \
rm $ {INSTDIR)program1 && \
echo“已在$(INSTDIR)中卸载”; \
其他\
(sudo rm $ {INSTDIR)program1 2> / dev / null && \
echo“已在$(INSTDIR)中卸载”)|| \
(回显“此机器上没有sudo,请尝试su。” \
&& su -c“rm $(INSTDIR)program1” && \
echo“已在$(INSTDIR)中卸载”); \
fi; \
其他\
回声“没有要删除的程序。” ; \
科幻

最佳答案

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

07-24 09:46