如何获得ETA?

问题描述:

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

  1. 有多少个目标需要构建。
  2. 需要多长时间 - 说实话,这可能是一个不行,因为它很难说!

我该如何在scons中做到这一点?

SCons目前没有内置进度指示器,提供一个也不是微不足道的。问题是,SCons不会首先构建完整的DAG,然后开始构建......这样您就可以有多少个访问目标可供您用作参考(= 100%)。 相反,它构成了DAG ...它会查看每个目标,然后展开其子项列表(源代码和隐式依赖项,如标题),以检查它们是否是最新的。如果一个孩子发生了变化,它会通过递归地应用相同的“构建步骤”来重建。 通过这种方式,SCons从命令行中给出的目标列表(以“。”dir为默认值)向目标列表爬行,在DAG之下...只有部件被访问过,用于(或换句话说:对所请求的目标具有依赖性)。

这使得SCons可以处理诸如“头文件,由必须首先编译的程序生成的头文件”......但这也意味着要访问的目标/子项的总数不断变化。所以,一个标准的进度指标会不断攀升到80%-90%,然后回落到50%......我不认为这会给你提供你真正的信息。提示:如果你的版本很大,而你又不想等待,那么就增量构建,并且只构建你当前正在处理的库/程序(“scons lib1”)。这仍将考虑到所有的依赖关系,但只有一小部分DAG必须扩展。所以,您使用更少的内存并获得更快的更新时间......尤其是如果您使用“交互式”模式。在总共有100000个C文件的项目中,具有500个C文件的单个库的更新在我的机器上花费大约1s。有关此主题的更多信息,请查看http://scons.org/wiki/WhySconsIsNotSlow

+0

我很害怕这个......该死的!^_〜谢谢。 – Sardathrion 2014-11-03 13:16:14