默认情况下,SCons 似乎会查看用于构建程序的“配方”并从中提取隐式依赖项。例如假设我的 SConstruct 包含:
Command('foo', 'foocreator.py', '/usr/bin/python foocreator.py > foo')
而且我已经构建了“foo”(“foo”是最新的)。现在我更改 SConstruct(或更现实地说,传递不同的选项),以便 'foo' 的命令变为:
Command('foo', 'foocreator.py', '/usr/bin/qrsh -V -cwd /usr/bin/python foocreator.py > foo')
(换句话说,通过 SGE 运行 foocreator.py 脚本)现在 SCons 尝试重建 foo,--debug=explain 告诉我这是因为“对 /usr/bin/qrsh 的新依赖”和“已删除的依赖”在 /usr/bin/python")。
我怎样才能防止从配方中推断出这种依赖关系,最好是全局的?到目前为止,我什至无法找到这种行为的规范。我不想说明“foo”并不真正依赖于 python 或 qrsh 的事实,因为我必须对每个目标以及这些程序的每个可能位置都这样做。必须有一个“正确”的方式。
编辑:我现在也尝试为每个目标显式添加忽略,如:
Ignore('foo', '/usr/bin/python')
Ignore('foo', '/usr/bin/qrsh')
甚至这也行不通!每当我在运行 qrsh 和不运行之间切换时,SCons 仍然希望重建所有内容。