2012-03-05 6 views
0

저는 Makefile에 새롭기 때문에 아마도 이것이 가장 좋은 방법입니다 (입력 방법에 대해 많은 것을 알고 있습니다, 어떻게 광산이 나쁜지 배우고 싶습니다.). 어쨌든, 여기 내 문제는 다음과 같습니다.데몬 용 Makefile

나는 내 프로그램을 위해 작성한 데몬을 가지고 있으며 Makefile (대상은 "설치")을 사용하여 설치하려고합니다. "설치"대상이하는 일은 데몬 바이너리를 위치로 옮긴 다음 "서비스 스크립트"를 /etc/init.d/ 또는 /etc/rc.d/로 이동하는 것입니다 (다른 배포판은 다른 폴더를 가지고 있기 때문에 ...). 여기 내 메이크 지금까지입니다 : 그들이 할 경우

all: 
     @echo "Making Components" 
     @cd Daemon; make 
     @echo "Components Built" 
install: 
     @echo "Installing Components" 
     @mkdir -p /usr/lib/ 
     @cp Daemon/myprog_d /usr/lib/myprog_d 
     [email protected] -d /etc/init.d && cp Scripts/myprog /etc/init.d/ 
     [email protected] -d /etc/rc.d && cp Scripts/myprog /etc/rc.d/ 
     [email protected] ! -d /etc/init.d -a ! -d /etc/rc.d && echo " Warning: Couldn't install script. Manually install Scripts/myprog" 
     @mkdir -p /var/log/ 
     @echo "Installed." 
uninstall: 
     @echo "Uninstalling Components" 
     @./Scripts/myprog stop > /dev/null 
     @rm -f /usr/lib/myprog_d 
     @echo "Uninstall complete" 
clean: 
     @echo "Cleaning Components" 
     @cd Daemon; make clean 
     @echo "Clean complete" 

당신이 볼 수 있듯이, "설치"대상 시험은 두 디렉토리가 존재하는지 확인하고, 복사본은 그들에 스크립트는 (아직 수행하지 않은 그것을 "제거"하려면 걱정하지 마십시오).

내 첫 번째 질문 : 이것이 올바른 방법인가요? "all"및 "clean"타겟이 작동합니다 (추측 할 수있는 것처럼 "Daemon /"에 다른 makefile이 있음).하지만이 작업을보다 명확하게 수행 할 수있는 방법이 있는지 알고 싶습니다.

둘째, "test"함수가 0이 아니기 때문에 오류가 무시되기 전에 "-"해야합니다. 불행하게도, 그 "를 설치 만든다"출력 존재의 결과 :

매우 추한 및 아마 좋습니다
Installing Components 
make: [install] Error 1 (ignored) 
make: [install] Error 1 (ignored) 
Installed. 

. 이 경우 무엇을 할 수 있습니까? (- @ @와 - 나는 모두를 시도했지만, @은 "무시"출력을 표시하지 않습니다)

감사 크리스

답변

1

내가 이런 식으로 할 거라고 :

@if [ -d /etc/init.d ]; then cp Scripts/myprog /etc/init.d/ ; fi 
@if [ -d /etc/rc.d ]; then cp Scripts/myprog /etc/rc.d/ ; fi 

을 그리고 나는 너의 다음 라인 ([email protected] ! -d /etc/init.d -a !...)에 약간 혼란 스럽지만 아마 같은 방법으로 할 수있을 것이다.

오류 메시지를 처리하지만 메이크 파일을 그대로 유지하려는 경우 make -s을 실행하여 오류 메시지를 표시하지 않을 수 있습니다.

+0

고맙습니다. 마지막 줄은 "어디로 옮길 지 찾지 못했습니다" – Chris