我需要构建一个需要特定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
不幸的是,在进行依赖时,它会遇到需要该包的文件,并且在执行我的PACKAGENOTIFIFICATION之前会出错。另一种替代方法是制定一个单独的目标,该目标的唯一目的是运行通知:
maintarget: notify other_dependencies
commands
notify:
$(PACKAGENOTIFICATION)
但是,由于始终需要执行此幻影依赖关系,因此,请不要让该用户报告该程序是最新的。
使始终保持最新状态并在通知消失之前执行我的通知的最佳方法是什么?
谢谢!
最佳答案
如果您的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)
如果没有,还有其他方法。