SCons -- target 那个 "deletes"文件?

标签 scons

在 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.isfileos.unlink,以保持在不同平台上的兼容性。

关于SCons -- target 那个 "deletes"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409672/

相关文章:

c++ - GCC 调试标志 SCons

python - "Error 309"是什么意思?

python - SConscript 和 SConstruct 文件之间的区别?

c++ - 如何将 Emacs 和 CEDET 与 SCons 一起使用?

linux - Raspbian G++ 编译器在 --my 命令上停止

fortran - Scons 教程,重点是 Fortran

scons - 使用 SCons 编译 Godot

windows - 链接命令行太长 : how to use response files when linking in scons on windows

c++ - 从文件中读取 SCons 环境设置

c++ - 在错误的平台上使用 Scons 链接器搜索构建 iOS 静态库