依赖于无目标的目标

Dependending on a targetless target

我正在尝试使用 SCons 自动化工作流,其中多个脚本依赖于一个项目文件,而该项目文件又引用多个源文件。只有脚本具有真正的构建操作,对项目没有任何影响;它只包含文件名。

为了减少冗余,我想从脚本文件中提取项目文件的名称,并从项目文件中提取源文件的名称。我正在为此使用自定义 Scanner(),效果很好,--tree=status 为我提供了我想象中的依赖项,即

[E B   C  ]+-output.log
[E        ]  +-script.tcl
[E        ]    +-project.prj
[E     C  ]      +-source1
[E     C  ]      +-source2
            (and so on for other scripts)

但是,如果我触摸源文件,则不会触发构建操作。我玩过 Depends()SideEffect() 和其他人,但我似乎误解了这里的一些东西。我现在能想到的唯一解决方法是

是否有其他方法可以使用 SCons 正确建模?

您要搜索的是您的构建器 "prj->tcl" 的自定义发射器。看看 http://scons.org/wiki/ToolsForFools 的例子。您可能希望保持 "targets" 列表不变,但根据扫描过程的结果扩展 "sources"。是的,你必须在发射器内扫描......扫描器将是隐式依赖项的正确位置,例如 C/C++ headers 跨 file/folder 边界运行。