makefile修改时间欺骗?

时间:2011-03-11 19:47:55

标签: makefile

所以我有一个makefile,并且该makefile是一个规则,它首先执行预编译转换并修改源文件,然后将其编译为正确的目标。我想知道是否有办法欺骗/强制make认为源实际上没有被修改,因此make只会在用户修改时重新编译,而不是在make规则修改源时重新编译。我尝试使用touch命令在修改后转回修改时间戳,但没有成功。有没有人有任何想法?感谢。

2 个答案:

答案 0 :(得分:1)

实现目标的一种可能方法是创建一个辅助目标 - 这是一个零长度文件,就像一个标志,表示你是否已经完成了你想做的事情或不,并且具有基于该文件进行预编译转换的规则。

我想我对你要做的事情有疑问。为什么转换就地,而不是让转换创建一个中间文件然后被编译。

就地转换可能会有问题,特别是如果转换过程不是幂等的。

修改1

根据你的问题,我会说你可以这样做:

target.flag: target.original-file
    touch target.save -r target.original-file
    <do transformation>
    touch target.original-file -r target.save
    rm target.save
    touch target.flag

使用带有“-r”选项的touch表示从指定文件中获取访问日期。因此,您将在临时文件中保存原始文件的日期。然后进行转换,然后使用touch从临时文件中获取日期并将其重新放回现在已转换的文件。

答案 1 :(得分:0)

这个怎么样:

foo.target: foo.source
    $(TRANSFORM) $<
    $(COMPILE) $<
相关问题