连续两次运行我的目标,它会被执行两次。这是错误的,因为配置文件是新的。
$ cat makefile
.ONESHELL:
configure: configure.www
@REMOTE_FILE=$$(cat $<)
@wget $${REMOTE_FILE}
@tar -xf $$(basename $${REMOTE_FILE})
@mv pspp-1.4.1/configure .
$ cat configure.www
https://ftp.gnu.org/gnu/pspp/pspp-1.4.1.tar.gz
在$$(cat <$)
发生之前的cp
创建的配置文件。
从未来用户的评论中发布@Renaud Pacalet 回答:
确实,mv
指令并没有改变修改日期,所以makefile确实比较了PSPP的最后修改日期configure
和我自己的configure.www
修改日期。由于后者较新(并将保持较新),因此目标将继续执行。
$ stat configure | grep "Modify"
Modify: 2020-09-06 01:20:01.000000000 +0300
$ stat configure.www | grep "Modify"
Modify: 2021-05-05 10:11:43.891400412 +0300 // Newer !
我通过添加一个final来解决它touch
(没有双关语:))
.ONESHELL:
configure: configure.www
@REMOTE_FILE=$$(cat $<)
@wget $${REMOTE_FILE}
@tar -xf $$(basename $${REMOTE_FILE})
@mv pspp-1.4.1/configure .
@touch $@ <----------------------
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句