Я очень новичок в 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