sconsを使用して構築された大きなC++プロジェクトがあります。ビルドが遅いので、ビルドを速くするためにいくつかの変更を加えたいと思います。ここで、ビルドの最も遅い部分を高速化することに時間を集中したいと思います。
コンパイルに最も時間がかかるファイルを特定するにはどうすればよいですか?
この質問は古く、すでに受け入れられていますが、最近別の質問から参照されました。この回答で述べたように、はるかに洗練された解決策は、SCons--debug=time
コマンドラインオプションを使用することだと思います。
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変数を指定して、コンパイララッパーを作成します。
次に、オプションを使用して、1つの並列スレッドのみでSConsを実行します-j1
。