依赖于无目标的目标
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()
和其他人,但我似乎误解了这里的一些东西。我现在能想到的唯一解决方法是
- 我的项目有一个自定义生成器,它只会输出一个虚拟文件,并让脚本依赖于它作为 "source"、
- 将我的两个扫描器(用于脚本和项目)合并为一个以消除额外的级别。
是否有其他方法可以使用 SCons 正确建模?
您要搜索的是您的构建器 "prj->tcl" 的自定义发射器。看看 http://scons.org/wiki/ToolsForFools 的例子。您可能希望保持 "targets" 列表不变,但根据扫描过程的结果扩展 "sources"。是的,你必须在发射器内扫描......扫描器将是隐式依赖项的正确位置,例如 C/C++ headers 跨 file/folder 边界运行。
我正在尝试使用 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()
和其他人,但我似乎误解了这里的一些东西。我现在能想到的唯一解决方法是
- 我的项目有一个自定义生成器,它只会输出一个虚拟文件,并让脚本依赖于它作为 "source"、
- 将我的两个扫描器(用于脚本和项目)合并为一个以消除额外的级别。
是否有其他方法可以使用 SCons 正确建模?
您要搜索的是您的构建器 "prj->tcl" 的自定义发射器。看看 http://scons.org/wiki/ToolsForFools 的例子。您可能希望保持 "targets" 列表不变,但根据扫描过程的结果扩展 "sources"。是的,你必须在发射器内扫描......扫描器将是隐式依赖项的正确位置,例如 C/C++ headers 跨 file/folder 边界运行。