makefile修改时间欺骗?
所以我有一个makefile,在这个makefile中有一个规则,它首先执行预编译转换,修改源文件,然后将其编译成适当的目标文件。我想知道是否有办法欺骗/强迫make认为源代码没有被实际修改,这样make只会在用户修改时重新编译,而不会在make规则修改源代码时重新编译。在进行修改后,我尝试使用makefile修改时间欺骗?,makefile,Makefile,所以我有一个makefile,在这个makefile中有一个规则,它首先执行预编译转换,修改源文件,然后将其编译成适当的目标文件。我想知道是否有办法欺骗/强迫make认为源代码没有被实际修改,这样make只会在用户修改时重新编译,而不会在make规则修改源代码时重新编译。在进行修改后,我尝试使用touch命令返回修改时间戳,但没有成功。有人有什么想法吗?谢谢。实现所需功能的一种可能方法是创建一个辅助目标——这是一个零长度的文件,其作用类似于一个标志,表示您是否完成了所需的操作,并具有基于该文件进
touch
命令返回修改时间戳,但没有成功。有人有什么想法吗?谢谢。实现所需功能的一种可能方法是创建一个辅助目标——这是一个零长度的文件,其作用类似于一个标志,表示您是否完成了所需的操作,并具有基于该文件进行预编译转换的规则
我想我有一个关于你想做什么的问题。为什么要进行转换,而不是让转换创建一个中间文件,然后进行编译
就地转换可能会有问题,特别是如果转换过程不是幂等的
编辑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
target.flag:target.original-file
触摸target.save-r target.original-file
触摸target.original-file-r target.save
rm target.save
触摸target.flag
使用“-r”选项表示从指定文件获取访问日期。因此,您将在临时文件中保存原始文件的日期。然后进行转换,然后使用触摸键从临时文件中获取日期,并将其放回当前转换的文件中。实现所需的一种可能的方法是创建一个次要目标--即零长度文件,它的作用类似于一个标志,表明您是否完成了所需的操作,并具有基于该文件进行预编译转换的规则 我想我有一个关于你想做什么的问题。为什么要进行转换,而不是让转换创建一个中间文件,然后进行编译 就地转换可能会有问题,特别是如果转换过程不是幂等的 编辑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
target.flag:target.original-file
触摸target.save-r target.original-file
触摸target.original-file-r target.save
rm target.save
触摸target.flag
使用“-r”选项表示从指定文件获取访问日期。因此,您将在临时文件中保存原始文件的日期。然后进行转换,然后使用触摸键从临时文件中抓取日期,并将其放回现在转换的文件中。这样如何:
foo.target: foo.source
$(TRANSFORM) $<
$(COMPILE) $<
foo.target:foo.source
$(转换)$<
$(编译)$<
这个怎么样:
foo.target: foo.source
$(TRANSFORM) $<
$(COMPILE) $<
foo.target:foo.source
$(转换)$<
$(编译)$<
您是否可以在同一个makefile中添加另一条不更改源文件的规则?你能用你提到的规则粘贴一段makefile吗?在什么情况下,Make应该运行转换,从而修改源文件?@Beta-Make应该在任何时候看到源文件已更改并且需要重新编译时执行转换。你不可能在相同的makefile中添加另一条规则吗不更改源文件吗?你能用你提到的规则粘贴一段makefile吗?在什么情况下Make应该运行转换,从而修改源文件?@Beta-Make应该在任何时候看到源文件已更改并需要重新编译时执行转换,或者你可以切换到ANT,它比Make更优雅更强大。与一些新工具相比,Bug有点像石头刀和熊皮。你如何在蚂蚁中做它?变换必须在适当的地方执行,因为它是我使用的一个第三方工具的带帮助,它有一个bug,而且这个变换实际上是用来在检查源代码之前修改源的。顺便说一句,转换是幂等的。如果我不维护遗留代码,Ant将是一个不错的选择或者你可以切换到ANT,它比Make更优雅、更强大。与一些新工具相比,Bug有点像石头刀和熊皮。你如何在蚂蚁中做它?变换必须在适当的地方执行,因为它是我使用的一个第三方工具的带帮助,它有一个bug,而且这个变换实际上是用来在检查源代码之前修改源的。顺便说一句,转换是幂等的。如果我不维护遗留代码,Ant将是一个不错的选择