gpt4 book ai didi

scons - 我如何告诉 SCons 忽略来自命令操作的隐式依赖项?

转载 作者:行者123 更新时间:2023-12-01 12:52:14 26 4
gpt4 key购买 nike

默认情况下,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 和不通过 qrsh 之间切换时,SCons 仍然想要重建所有内容。

最佳答案

问题是 scons 对操作进行了一些最小的解析以确定您正在调用什么,因此

   python $SOURCE > $TARGET

自动添加对 python 的依赖。它还在 Action 的 md5 中包含 Action TEXT。所以如果你把它改成

   anotherprog -cmd python $SOURCE > $TARGET

它将检测到 3 个变化:

  1. 删除了对 python 的依赖
  2. 添加了对 anotherprog 的依赖
  3. 更改了命令行

这是半合理的,因为如果你改变另一个程序,你应该有一个重建。

您可以通过在“$(”和“$)”中包含不重要的位来停止 scons 检测命令行更改,因此更改

   anotherprog $( -date $TIME $) $SOURCE > $TARGET

   anotherprog $( -time $DATE $) $SOURCE > $TARGET

不会导致重建。

所以我猜你有没有

  $( python $) $SOURCE > $TARGET

  $( anotherprog =cmd python $) $SOURCE > $TARGET

它会做你想做的事。但我还没有尝试过。

关于scons - 我如何告诉 SCons 忽略来自命令操作的隐式依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com