在SCons中运行一个没有依赖关系的命令

12

我希望在SCons中运行一个没有任何输入/输出文件的命令(实际上,输入和输出是同一个文件)。目前,我只是使用subprocess.Popen手动运行它,但是否有更适合SCons的方法来执行它?

1个回答

18

您可以使用Command函数来运行通过Popen运行的任何外部命令,并且您可以使用AlwaysBuild函数来确保即使目标文件存在,也始终运行您的命令。由于Scons不喜欢依赖关系环路,请将源列表留空。

myfile = env.Command('myfile.out', [], 'echo Hello world > $TARGETS')
env.AlwaysBuild(myfile)

scons wiki还提供了一个PhonyTargets的方法,它可以方便地设置许多简单的命令。


如果已经有一个构建'myfile.out'的规则,那么它会抱怨有多种构建目标的方式。我想要有一个规则来创建文件,另一个规则来修改它。 - Luke McCarthy
我认为一个目标有两个规则是不好的想法。如果目标已经存在,scons如何知道是否调用了“modify”规则?如果你有两个目标,每个规则对应一个,那么它会更好地工作。或者有一个规则执行“create”和“modify”操作。 - Dave Bacher
请注意 scons 文档中指出 AlwaysBuild 是一个具有误导性的名称。在实际发出命令之前,scons 仍会评估一些规则。 - Adam Naylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接