28

コンパイル時間を改善するためにどの翻訳ユニットを再構築する必要があるかを把握する必要があります。cmakeを使用して、翻訳ユニットのコンパイル時間を取得するにはどうすればよいですか?

4

4 に答える 4

10

コンパイラ(および/またはリンカー)を「time original-cmd」に置き換えることを期待しています。単純な「make」を使用すると、次のようになります。

make CC="time gcc"

「time」プログラムはコマンドを実行し、かかった時間を報告します。同等のメカニズムは「cmake」で機能します。時間だけでなくコマンドも取得する必要がある場合は、必要なデータを必要な方法で記録する、時間に類似した独自のコマンドを作成できます (シェル スクリプトで実行できます)。

于 2011-05-12T05:09:53.713 に答える
7

前の回答を拡張するために、ここに私が書いた具体的な解決策があります。つまり、理論上だけでなく、実際に機能することは間違いありませんが、約 3 分間だけ 1 人だけが使用したので、おそらくいくつかの不運があります。

#!/bin/bash
{ time clang "$@"; } 2> >(cat <(echo "clang $@") - >> /tmp/results.txt)

上記の2行を入れて/tmp/time-clang実行しました

chmod +x /tmp/time-clang
cmake .. -DCMAKE_C_COMPILER=/tmp/time-clang
make

を使用-DCMAKE_CXX_COMPILER=して、まったく同じ方法で C++ コンパイラをフックできます。

  • make -j8結果が奇妙な方法でインターリーブされたくなかったので、使用しませんでした。

  • #!/bin/bashUbuntu 12.04のデフォルトのシェル (dashだと思いますか?) は、これらのリダイレクト演算子に満足していなかったため、スクリプトに明示的なハッシュバンを配置する必要がありました。

于 2015-10-27T00:08:06.460 に答える