如何衡量scons构建的每个组件的构建时间?

时间:2010-08-04 02:53:29

标签: scons timing

我有一个使用scons构建的大型C ++项目。 它的构建速度很慢,我想做一些改变,试图让它更快地构建。 现在,我想集中精力加快构建中最慢的部分。

如何确定哪些文件的编译时间最长?

3 个答案:

答案 0 :(得分:3)

我知道这个问题已经过时了,已经被接受了,但最近又提到了另一个问题。我认为更优雅的解决方案是使用SCons --debug=time命令行选项,如this answer中所述。

答案 1 :(得分:2)

如果您正在使用LInux,则可以包装gccg++,以便编译器的调用使用gtime实用程序。对编译器的每次调用都如下所示:

/usr/bin/time /usr/bin/g++ [rest of command]

BASH有一些神奇的语法可以帮助你避免重新转义你的论点:

#!/bin/bash -f
PATH_TO_COMPILER_DIR=/usr/bin
/usr/bin/time $PATH_TO_COMPILER_DIR/"$@"

然后将$ PATH变量指向编译器包装器。

然后通过选项-j1仅使用1个并行线程运行SCons。

答案 2 :(得分:2)

我通过在CXXCOM变量的开头添加一些额外的东西来解决这个问题。 Scons使用此变量进行实际编译:

if os.getenv('BUILD_STYLE')=='timing':
  cxxcom = env['CXXCOM']
  env.Replace( CXXCOM = 'time '+cxxcom )

然后我使用类似的东西运行scons

BUILD_STYLE=timing scons > timing_log.txt

最后使用一些vim宏整理日志。