我有一个使用scons构建的大型C ++项目。 它的构建速度很慢,我想做一些改变,试图让它更快地构建。 现在,我想集中精力加快构建中最慢的部分。
如何确定哪些文件的编译时间最长?
答案 0 :(得分:3)
我知道这个问题已经过时了,已经被接受了,但最近又提到了另一个问题。我认为更优雅的解决方案是使用SCons --debug=time
命令行选项,如this answer中所述。
答案 1 :(得分:2)
如果您正在使用LInux,则可以包装gcc
或g++
,以便编译器的调用使用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宏整理日志。