我希望能够有选择地构建一个基于顶层定义的通用构建模式的分层源树。源树由许多不同的模块组成,有时位于层次结构中的不同级别,如下所示:
- Submodule Package B
- Module B1
每个模块可能依赖于任意数量的其他模块(当然,没有周期)。
每个模块需要能够激活在顶层定义的一组模板目标的选择,这些目标将查找特定的源文件并生成特定的输出。例如,Library模板目标将简单地构建当前模块的共享库。UnitTest目标将确保所有上游依赖项都构建了它们的库,查找单元测试源,构建并运行单元测试可执行文件。
目标是让每个模块都有自己的封装SConscript文件,该文件将列出( a)其依赖项和( b)应该为其启用的顶级目标的名称。
理想情况下,我希望确保这些目标能够以类似于这样的方式构建:
scons ModuleA1_UnitTest我如何设置scon来为我做到这一点,特别是以一种对添加新模块很友好的方式?
发布于 2013-09-09 14:26:50
如果我正确理解了您的问题,您可以使用SCons Alias()函数来完成这个任务。
Alias()函数(在SCons手册页中有更好的描述)的好处是可以将多个目标分配给同一个别名,如下所示:
模块A SConscript:
libAtarget = env.Library(target='a', src=libASrcFiles)
env.Alias('libraries', libAtarget)模块B SConscript:
libBtarget = env.Library(target='b', src=libBSrcFiles)
env.Alias('libraries', libBtarget)别名的范围是项目范围的,这意味着可以在不同的SConscript脚本中添加别名。我不确定您是否能够在不指定目标的情况下在根SConstruct中定义别名(用于创建模板目标)。
假设您正确地列出了二进制文件所需的库等,那么您就不必在其他模块的依赖项上做任何特殊的事情,因为SCons应该在内部管理它。
https://stackoverflow.com/questions/18699743
复制相似问题