1

我需要构建一个需要特定 Linux 包的 C 程序。我将一个变量 PACKAGENOTIFICATION 设置为一个 shell 命令,该命令应该检查是否为 Ubuntu 安装了该软件包,如果没有则打印一个通知:

PACKAGENOTIFICATION := if cat /etc/issue | grep Ubuntu -c >>/dev/null; then if ! dpkg -l | grep libx11-dev -c >>/dev/null; then echo "<insert notification here>"; fi; fi

[...]

maintarget: dependencies
            $(PACKAGENOTIFICATION)
            other_commands

不幸的是,在制作依赖项时,它会运行到需要包的文件中,并在执行我的 PACKAGENOTIFICATION 之前出错。另一种表述是创建一个单独的目标,其唯一目的是运行通知:

maintarget: notify other_dependencies
            commands

notify: 
            $(PACKAGENOTIFICATION)

然而,由于这个幻像依赖总是需要被执行,make 永远不会报告程序是最新的。

让始终报告为最新的最佳方法是什么,但在通知死亡之前执行我的通知?

谢谢!

4

1 回答 1

3

如果您的 Make 版本支持“仅订购”先决条件,则可以这样做:

# Note the pipe
maintarget: other_dependencies | notify
            commands

# This should be an order-only preq of any target that needs the package
notify: 
            $(PACKAGENOTIFICATION)

如果没有,还有其他方法。

于 2012-08-07T21:02:53.373 回答