首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scon具有可选择目标的分层模块

使用scon具有可选择目标的分层模块
EN

Stack Overflow用户
提问于 2013-09-09 13:48:50
回答 1查看 216关注 0票数 2

我希望能够有选择地构建一个基于顶层定义的通用构建模式的分层源树。源树由许多不同的模块组成,有时位于层次结构中的不同级别,如下所示:

  • 大模块封装
    • 子模块包A
      • 模块A1
      • 模块A2

代码语言:javascript
复制
- Submodule Package B 
    - Module B1

  • 小模块封装
    • 模块C1
    • 模块C2

每个模块可能依赖于任意数量的其他模块(当然,没有周期)。

每个模块需要能够激活在顶层定义的一组模板目标的选择,这些目标将查找特定的源文件并生成特定的输出。例如,Library模板目标将简单地构建当前模块的共享库。UnitTest目标将确保所有上游依赖项都构建了它们的库,查找单元测试源,构建并运行单元测试可执行文件。

目标是让每个模块都有自己的封装SConscript文件,该文件将列出( a)其依赖项和( b)应该为其启用的顶级目标的名称。

理想情况下,我希望确保这些目标能够以类似于这样的方式构建:

代码语言:javascript
复制
scons ModuleA1_UnitTest

我如何设置scon来为我做到这一点,特别是以一种对添加新模块很友好的方式?

EN

回答 1

Stack Overflow用户

发布于 2013-09-09 14:26:50

如果我正确理解了您的问题,您可以使用SCons Alias()函数来完成这个任务。

Alias()函数(在SCons手册页中有更好的描述)的好处是可以将多个目标分配给同一个别名,如下所示:

模块A SConscript:

代码语言:javascript
复制
libAtarget = env.Library(target='a', src=libASrcFiles)
env.Alias('libraries', libAtarget)

模块B SConscript:

代码语言:javascript
复制
libBtarget = env.Library(target='b', src=libBSrcFiles)
env.Alias('libraries', libBtarget)

别名的范围是项目范围的,这意味着可以在不同的SConscript脚本中添加别名。我不确定您是否能够在不指定目标的情况下在根SConstruct中定义别名(用于创建模板目标)。

假设您正确地列出了二进制文件所需的库等,那么您就不必在其他模块的依赖项上做任何特殊的事情,因为SCons应该在内部管理它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18699743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档