在 SCons 中是否有一种简单的方法来创建一个目标,如果指定的文件被验证不存在,该目标被认为是最新的? (当然,要有一个构建器,如果文件确实存在,它会删除文件……)
例如:
b_file = env.Command("文件", ["文件1", "文件2", "文件3"], “构建文件 -o $TARGET $SOURCES”)
env.Depends(b_file,env.FileMustNotExist("file4"))
想法是,在构建"file"之前,SCons 将确保不仅“file1”、“file2”和“file3”存在,而且“file4”不存在。
我知道对于这个特殊情况,我可以通过在命令开头添加“rm -f file4;”来近似我想要的,但这并不完全相同。特别是,如果我将“rm”命令添加到构建器,然后在 SCons 外部创建“file4”,重新运行 SCons 将不会删除“file4”,除非其他来源之一已更改。
我想要这样的东西,即创建“file4”并重新运行 SCons 会导致简单地删除“file4”并指示现在已构建“files”。
最佳答案
据我所知,这是设计中没有预见到的,因此是不可能的。注意 SCons 是一个面向文件
的构建
系统,所以它的主要任务是创建文件...而不是删除它们。
在较新的版本中有伪目标,它用于不创建实际输出文件的构建操作......但如果我没记错的话,它不能删除文件。
因此,看起来“rm -f 文件”策略仍然是最好的方法。不过,您可能希望使用 Python 的 os.path.isfile
和 os.unlink
,以保持在不同平台上的兼容性。
关于SCons -- target 那个 "deletes"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409672/