如何获得ETA?

时间:2014-11-03 12:00:16

标签: scons

我使用scons构建了几组大量的源文件(目标)。现在,我想知道是否有一个可以用来向我展示的指标:

  1. 还有多少目标需要建设。
  2. 需要多长时间 - 说实话,这可能是不行的,因为它真的很难说!
  3. 我怎样才能在scons中做到这一点?

1 个答案:

答案 0 :(得分:2)

SCons目前没有内置进度指示器,提供一个也不是一件容易的事。问题是,SCons不首先构建完整的DAG,然后开始构建......这样您就可以使用可以用作参考的目标总数(= 100) %)。 相反,它在移动中组成DAG ...它查看每个目标,然后扩展其子项列表(源和隐式依赖项,如标题)以检查它们是否是最新的。如果孩子已经改变了,那么通过应用相同的"构建步骤"递归。 通过这种方式,SCons从目标列表中抓取自己,就像在命令行中给出的那样("。" dir是默认值),在DAG下面......只有部分是永远的访问过,这是所要求的目标所必需的(或者,换句话说:具有依赖性)。

这使得SCons可以处理由必须首先编译的程序生成的"头文件等文件。在第一次去...但它也意味着要访问的目标/儿童的总数不断变化。 因此,标准进度指标将持续攀升至80%-90%,然后回落至50%......我不认为这将为您提供您真正追求的信息。

提示:如果您的构建很大并且您不想等待,请执行增量构建并仅构建您当前正在处理的库/程序(" scons lib1" )。这仍将考虑所有依赖关系,但只有一小部分DAG必须扩展。因此,您使用更少的内存并获得更快的更新时间...特别是如果您使用" interactive"模式。在一个总共有100000个C文件的项目中,使用500个C文件的单个库的更新在我的机器上大约需要1秒。有关此主题的更多信息,请查看http://scons.org/wiki/WhySconsIsNotSlow