默认情况下,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,因为我将不得不为每个目标和每个可能的这些程序位置都这样做。一定有一种“正确”的方法。
编辑:我现在也尝试了为每个目标显式添加Ignores,例如:
Ignore('foo', '/usr/bin/python')
Ignore('foo', '/usr/bin/qrsh')
即使如此也不起作用!每当我在qrsh和非qrsh之间切换时,SCons仍然想要重建所有内容。