守护进程的Makefile

守护进程的Makefile,makefile,daemon,Makefile,Daemon,我对Makefiles非常陌生,所以我可能没有用最好的方式来做这件事(非常感谢您的输入,因为我想了解我的不好的方式/原因)。无论如何,我的问题是: 我有一个为我的一个程序编写的守护进程,我正试图用Makefile安装它(目标是“install”)。“安装”目标应该做的是将守护程序二进制文件移动到一个位置,然后将“服务脚本”移动到/etc/init.d/或/etc/rc.d/(因为不同的发行版有不同的文件夹…)。这是我目前的makefile: all: @echo "Making

我对Makefiles非常陌生,所以我可能没有用最好的方式来做这件事(非常感谢您的输入,因为我想了解我的不好的方式/原因)。无论如何,我的问题是:

我有一个为我的一个程序编写的守护进程,我正试图用Makefile安装它(目标是“install”)。“安装”目标应该做的是将守护程序二进制文件移动到一个位置,然后将“服务脚本”移动到/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"
如您所见,“安装”目标测试这两个目录是否存在,如果存在,则将脚本复制到其中(我还没有完成“卸载”,不用担心)

我的第一个问题:这样做对吗?“all”和“clean”目标可以工作(您可以推断,“Daemon/”中还有另一个makefile),但我想知道是否有更干净的方法来实现这一点

其次,因为“test”函数返回非零,所以我必须在它前面加“-”,这样错误就会被忽略。不幸的是,这导致“make install”输出为:

Installing Components
make: [install] Error 1 (ignored)
make: [install] Error 1 (ignored)
Installed.
这是非常丑陋的,可能不是好的做法。在这种情况下我能做什么?(我已尝试了-@和-,但@不会抑制“忽略”输出)

真诚地, 克里斯

我会这样做:

@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

来抑制它们,谢谢,那太好了!最后一句话的意思是“找不到移动它的位置”