GNU make手册介绍了仅订购的先决条件: https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html
target: prerequisite1 prerequisite2 | orderonlyprerequisite1 orderonlyprerequisite2
但是,尽管该手册页给出了一个示例并描述了仅订购先决条件的目的,但是手册页在任何时候都没有回答标题中的问题:什么是仅订购先决条件?
您能给出一个精确的定义吗?
答案 0 :(得分:1)
首先,让我们回顾一下普通的先决条件。
基本上,Makefile中的前提条件具有两个功能:(a)对它们进行检查,并在必要时在目标之前 构建它们; (b)如果重新构建了任何先决条件(或者只是比目标更新),那么目标也将被重建。
现在,仅订购的先决条件可以(a),即强加构建顺序,而不是(b)。
答案 1 :(得分:0)
我认为文档确实描述了它们的行为。它描述了正常先决条件的行为:
正常先决条件有两个语句:首先,它强加了调用配方的顺序:在运行目标的配方之前,将完成目标的所有先决条件的配方。其次,它强加了一个依赖关系:如果任何先决条件比目标新,那么目标就被认为是过时的,必须重新构建。
然后,它描述了仅订购先决条件的行为与此有所不同;它会:
对要调用的规则施加特定的顺序,不,如果执行了其中一个规则,则强制更新目标。
答案 2 :(得分:0)
假设你有一个这样的 Makefile
baby: love
touch $@
love:
touch $@
然后 make
说,
touch love
touch baby
现在你rm love
和再次make
说
touch love
touch baby
因为要生孩子就必须做爱,每次做爱都必须生孩子。但是,假设您不想每次做爱都生孩子。在这种情况下,您可以使用管道。
baby: | love
touch $@
现在你rm love
和make
只说
touch love
因为虽然要生孩子就必须做爱,但不是每次做爱都必须生孩子。