【问题标题】:SCons -- target that "deletes" a file?SCons——“删除”文件的目标?
【发布时间】:2015-09-05 05:03:11
【问题描述】:

SCons 中是否有一种简单的方法可以创建一个目标,如果命名文件被验证不存在,则该目标被认为是最新的? (当然,要有一个构建器,如果文件确实存在则删除它......)

例如:

b_file = env.Command("files", ["file1", "file2", "file3"], "构建文件 -o $TARGET $SOURCES")

env.Depends(b_file,env.FileMustNotExist("file4"))

这个想法是,在构建“文件”之前,SCons 不仅要确保“file1”、“file2”和“file3”存在,而且“file4”不存在。

我知道对于这种特殊情况,我可以通过在命令的开头添加“rm -f file4;”来近似我想要的,但这并不完全相同。特别是,如果我将“rm”命令添加到构建器,然后在 SCons 之外创建“file4”,则重新运行 SCons 不会删除“file4”,除非其他来源之一发生了变化。

我希望创建“file4”并重新运行 SCons 会导致简单地删除“file4”并指示“files”现在已构建。

【问题讨论】:

    标签: scons


    【解决方案1】:

    据我所知,这在设计中是没有预见到的,因此是不可能的。注意 SCons 是一个面向filebuild 系统,所以它的主要任务是创建文件......而不是删除它们。

    在较新的版本中,有一个 Pseudo 目标,它用于构建不会创建实际输出文件的操作……但如果我没记错的话,它不能删除文件。

    所以,看起来“rm -f 文件”策略仍然是最好的方法。不过,您可能希望使用 Python 的 os.path.isfileos.unlink,以在不同平台上保持兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-17
      • 2021-03-03
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多