Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
makefile修改时间欺骗?_Makefile - Fatal编程技术网

makefile修改时间欺骗?

makefile修改时间欺骗?,makefile,Makefile,所以我有一个makefile,在这个makefile中有一个规则,它首先执行预编译转换,修改源文件,然后将其编译成适当的目标文件。我想知道是否有办法欺骗/强迫make认为源代码没有被实际修改,这样make只会在用户修改时重新编译,而不会在make规则修改源代码时重新编译。在进行修改后,我尝试使用touch命令返回修改时间戳,但没有成功。有人有什么想法吗?谢谢。实现所需功能的一种可能方法是创建一个辅助目标——这是一个零长度的文件,其作用类似于一个标志,表示您是否完成了所需的操作,并具有基于该文件进

所以我有一个makefile,在这个makefile中有一个规则,它首先执行预编译转换,修改源文件,然后将其编译成适当的目标文件。我想知道是否有办法欺骗/强迫make认为源代码没有被实际修改,这样make只会在用户修改时重新编译,而不会在make规则修改源代码时重新编译。在进行修改后,我尝试使用
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将是一个不错的选择