我有一个使用 scons 构建的大型 C++ 项目。它的构建速度很慢,我想进行一些更改以使其构建速度更快。现在我想集中精力加快构建中最慢的部分。
如何计算出哪些文件编译时间最长?
我知道这个问题很旧,并且已经被接受,但是最近从另一个问题中引用了它。我认为更优雅的解决方案是使用 SCons--debug=time
命令行选项,如this answer中所述。
我通过在 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 宏整理日志。
如果您使用的是 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 变量指向您的编译器包装器。
然后通过 option 仅使用 1 个并行线程运行 SCons -j1
。