GNU如何决定要发出哪些消息?我正在使用的Makefile导致在目标达到执行日期时,“目标”消息不会执行任何操作。但我认为“目标”是最新的更为合适。

最佳答案

主要区别在于gmake是否具有建立目标的规则。如果目标没有规则,但目标存在,则gmake会说“什么都没做”,例如,“我不知道如何更新此内容,但它已经存在,所以我猜有无计可施。”如果有规则,但是目标已经是最新的,则gmake会说“是最新的”,例如,“我确实有更新此内容的说明,但它似乎已经更新了-到目前为止,所以我什么也不会做。”

这是一个具体的例子:

$ echo "upToDate: older ; @echo done" > Makefile
$ touch older ; sleep 2 ; touch upToDate ; touch nothingToDo
$ ls --full-time -l older upToDate nothingToDo
-rw-r--r-- 1 ericm ericm 0 2011-04-20 11:13:04.970243002 -0700 nothingToDo
-rw-r--r-- 1 ericm ericm 0 2011-04-20 11:13:02.960243003 -0700 older
-rw-r--r-- 1 ericm ericm 0 2011-04-20 11:13:04.960243001 -0700 upToDate
$ gmake upToDate
gmake: `upToDate' is up to date.
$ gmake nothingToDo
gmake: Nothing to be done for `nothingToDo'.


由于gmake没有关于“ nothingToDo”的规则,但是该文件已经存在,因此您会收到“什么都不要做”的消息。如果“ nothingToDo”不存在,您将收到熟悉的“无规则可做”消息。

相比之下,由于gmake的规则为“ upToDate”,并且文件似乎是最新的,因此您会收到“是最新的”消息。

关于makefile - GNU make:“'target'不需要做任何事情”与“'target'是最新的”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5734158/

10-09 22:46