gpt4 book ai didi

makefile - GNU make : “Nothing to be done for ' target'” vs. “' 目标'是最新的”

转载 作者:行者123 更新时间:2023-12-03 20:33:07 25 4
gpt4 key购买 nike

GNU make 如何决定要发出哪些消息?我正在使用的 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”不存在,您将收到熟悉的“No rule to make”消息。

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

关于makefile - GNU make : “Nothing to be done for ' target'” vs. “' 目标'是最新的”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5734158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com