2012-03-05 2 views
0

Я очень новичок в Makefiles, поэтому я, вероятно, не делаю этого наилучшим образом (ваш вклад очень ценится, так как я хотел бы узнать, как/почему мой плохой). Во всяком случае, вот моя проблема:Makefile for Daemon

У меня есть Daemon, который я написал для моей программы, и я пытаюсь установить ее с помощью Makefile (цель - «установить»). Предполагается, что цель «установить» - переместить двоичный файл демона в местоположение, а затем переместить «служебный скрипт» на /etc/init.d/ или /etc/rc.d/ (поскольку разные дистрибутивы имеют разные папки ...). Вот мой Makefile до сих пор:

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" 

Как вы можете видеть, «установить» целевые тесты, чтобы узнать, существуют ли эти две директории и, если они делают копии сценария в них (я еще не сделал это «удалить», не волнуйтесь).

Мой первый вопрос: Это правильный способ сделать это? «Все» и «чистые» цели работают (есть еще один make-файл в «Daemon /», как вы можете вывести), но я хочу знать, есть ли более чистый способ сделать это.

Во-вторых, поскольку функция «test» возвращает ненулевое значение, мне пришлось сделать «-» перед тем, чтобы ошибка была проигнорирована. К сожалению, это приводит к «сделать установку» выходного существа:

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-файл как есть, вы можете их подавить, запустив make -s.

+0

Спасибо, это здорово! Эта последняя строка должна была просто сказать: «Не удалось найти, куда ее переместить», – Chris