Makefile для Daemon - PullRequest
       13

Makefile для Daemon

0 голосов
/ 05 марта 2012

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

У меня есть Демон, который я написал для моей программы, и я пытаюсь установить его с помощью Makefile (цель - "установить"). Предполагается, что цель «install» должна переместить двоичный файл демона в какое-то место, а затем переместить «сценарий службы» в /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
        -@test -d /etc/init.d && cp Scripts/myprog /etc/init.d/
        -@test -d /etc/rc.d && cp Scripts/myprog /etc/rc.d/
        -@test ! -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"

Как видите, целевые тесты "install" проверяют, существуют ли эти два каталога, и, если они есть, копируют в них скрипт (я еще не сделал этого для "удаления", не беспокойтесь) .

Мой первый вопрос: это правильный способ сделать это? Цели "all" и "clean" работают (есть другой make-файл в "Daemon /", как вы можете вывести), но я хочу знать, есть ли более чистый способ сделать это.

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

Installing Components
make: [install] Error 1 (ignored)
make: [install] Error 1 (ignored)
Installed.

Что очень уродливо и, вероятно, не очень хорошая практика. Что я могу сделать в этом случае? (Я пробовал оба - @ и @ -, но @ не будет подавлять «игнорируемый» вывод)

С уважением, Chris

1 Ответ

1 голос
/ 06 марта 2012

Я бы сделал это так:

@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

И меня немного смущает ваша следующая строка (-@test ! -d /etc/init.d -a !...), но вы, вероятно, можете сделать это таким же образом.

Это заботится о сообщениях об ошибках, но если вы хотите сохранить make-файл как есть, вы можете подавить его, запустив make -s.

...