我是Makefiles的新手,所以我可能不是最好的方式(你的意见非常感谢,因为我想知道我的怎么/为什么不好)。无论如何,这是我的问题:
我有一个守护程序是我为我的程序编写的,我正在尝试使用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
-@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"
正如您所看到的,“安装”目标测试是否存在这两个目录,如果存在,则将脚本复制到它们中(我还没有将其“卸载”,不要担心)
我的第一个问题:这是正确的方法吗? “所有”和“干净”的目标都有效(在“守护进程/”中有另一个makefile,正如你可以推断的那样),但我想知道是否有更简洁的方法。
其次,因为“test”函数返回非零,所以我必须在它之前做“ - ”,这样才会忽略错误。不幸的是,这导致“make install”输出为:
Installing Components
make: [install] Error 1 (ignored)
make: [install] Error 1 (ignored)
Installed.
这是非常丑陋的,可能不是很好的做法。在这种情况下我该怎么办? (我试过了 - @和@ - ,但@不会抑制“忽略”输出)
此致 克里斯
答案 0 :(得分: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
我对你的下一行(-@test ! -d /etc/init.d -a !...
)感到有些困惑,但你可以用同样的方式做到这一点。
负责处理错误消息,但是如果你想保持makefile的原样,你可以通过运行make -s
来抑制它们。