pic*_*c11 15 makefile gnu-make
GNU如何决定发出哪些消息?我正在使用的Makefile导致在目标启动日期时发出"目标"消息无法执行任何操作.但我认为"目标"是最新的更合适.
Eri*_*ski 17
主要区别在于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'.
Run Code Online (Sandbox Code Playgroud)
由于gmake没有"nothingToDo"规则,但文件已经存在,因此您将收到"无所事事"消息.如果"nothingToDo"不存在,您将获得熟悉的"无规则"消息.
相反,因为gmake有一个"upToDate"规则,并且该文件似乎是最新的,所以你会得到"是最新的"消息.