守护进程的Makefile

时间:2012-03-05 18:23:57

标签: makefile daemon

我是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.

这是非常丑陋的,可能不是很好的做法。在这种情况下我该怎么办? (我试过了 - @和@ - ,但@不会抑制“忽略”输出)

此致 克里斯

1 个答案:

答案 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来抑制它们。