2009-09-20 5 views
2

메이크 파일에서 루트가되는 좋은 방법일까요?메이크 파일에서 루트가되는 좋은 방법일까요?

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

program1: $(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 

clean: 
     rm -f $(OBJS) program1 

install: 
     @if [ -f program1 ]; then \ 
       if [ $$(id -u) -eq 0 ]; then \ 
         cp program1 $(INSTDIR) && \ 
         echo "Installed in $(INSTDIR)" ; \ 
       else \ 
         (sudo cp program1 $(INSTDIR) 2> /dev/null && \ 
         echo "Installed in $(INSTDIR)") || \ 
         (echo 'No sudo on this machine, trying su.' \ 
         && su -c "cp program1 $(INSTDIR)" && \ 
         echo "Installed in $(INSTDIR)") ; \ 
       fi ; \ 
     else \ 
       echo "There was no program to install, run make." ; \ 
     fi 

uninstall: 
     @if [ -f $(INSTDIR)program1 ]; then \ 
       if [ $$(id -u) -eq 0 ]; then \ 
         rm $(INSTDIR)program1 && \ 
         echo "Uninstalled in $(INSTDIR)" ; \ 
       else \ 
         (sudo rm $(INSTDIR)program1 2> /dev/null && \ 
         echo "Uninstalled in $(INSTDIR)") || \ 
         (echo 'No sudo on this machine, trying su.' \ 
         && su -c "rm $(INSTDIR)program1" && \ 
         echo "Uninstalled in $(INSTDIR)") ; \ 
       fi ; \ 
     else \ 
       echo "There was no program to remove." ; \ 
     fi 
+1

자신 만의 규칙 작성을 고집하는 경우 더 표준적인 INSTDIR 대신 DESTDIR을 사용하십시오. –

답변

19

아니오!

먼저, 일반적으로 사용자는 sudo make install입니다. 둘째, 루트 권한이 항상 필요한 것은 아닌 사용자 지정 디렉토리에 프로그램을 설치하는 경우를 생각하지 않았습니다. 예를 들어 패키징 도구는이 기능을 사용하며 루트 권한이 없습니다.

+2

"root priveleges가 필요하지 않습니다"가 아니라 설치 프로그램에 문제가있는 경우 * 유해합니다. 일반 사용자는 설치된 파일을 편집 및/또는 액세스하지 못할 수 있습니다. –

관련 문제