scons:在第一个仅限时间戳构建期间不必要地重建文件

时间:2012-03-27 10:33:59

标签: scons

我正在进行仅限时间戳的构建以批量转换图像文件。许多已转换的图像文件已经存在,但我希望确保每次都检查它们。

为什么SCons需要一个数据库文件(.sconsign.dblite),当它被指示(通过env.Decider("timestamp-newer"))仅用于处理时间戳时,它用于MD5哈希数据?它不需要在构建之间为时间戳保留数据库,因为所有信息都与文件本身相关联。

如果dblite数据库不存在,SCons将重新转换所有图像,无论它们的时间戳是否意味着需要重建它们。标题是我在dblite数据库不存在时获得的示例消息。

如果有人能解释这一点,我真的很感激。我喜欢使用Python进行函数式编程,但SCons本身并不适合我。

4 个答案:

答案 0 :(得分:1)

使用“timestamp-newer”,SCons实际存储时间戳信息。你可以在这里看到原因:

Using Time Stamps to Decide If a File Has Changed

请尝试使用“timestamp-match”。

答案 1 :(得分:0)

我终于把它整理好了。 Brady对于如何使用SCons是正确的,但是几天前我最终解决了你也可以通过控制首先发出的构建命令来控制你想要构建的内容。在我的情况下,我使用os.path.exists()忽略了目标文件已存在的所有图像文件。

听起来很简单,但这是SConsmake之间的概念差异,因为make不会像SCons那样在构建之间保存其状态。

答案 2 :(得分:0)

是的,我正在尝试解决同样的问题,但是我正在批量转换视频文件,如果不必要的话,这需要几天时间。我已经完成了大部分工作。

所以我想要一种方法来告诉SCons,“对于现在存在 的文件,存储他们现有的时间戳/ MD5,并且不会重建,除非 future中的更改 。“

如果我找到方法,我会报告......

答案 3 :(得分:0)

我认为您的问题实际上是关于为什么在将决策程序设置为仅检查时间戳时存在.sconsign.dblite。

一个原因是它允许SCons跟踪用于生成每个目标的方法。如果更改,即使时间戳没有更改,也应重建受影响的目标。

您是否尝试构建单个文件,然后使用sconsign实用程序检查.sconsign.dblite文件的内容?