Linux(GCCを使用)で -軽い - コンパイルコマンドを記録する方法は?

Linux(GCCを使用)で -軽い - コンパイルコマンドを記録する方法は?

場合によっては、LinuxでGCCを介してコンパイルコマンドを記録するのが妥当です。

(コンパイルコマンド、成功または失敗、CPU、実行に要したリアルタイム時間、ソースファイルサイズなどを記録したい)同調プロジェクターGCCマイルストーンここにやる気を与える(高度な)例があります。より簡単な動機は、過去のコンパイルに関する簡単な統計を実行することです(たとえば、100,000を超えるソースファイルを食べたか5秒以上かかるコンパイル、たとえば複数の小さなファイルに対して大きなC ++ソースファイルをリファクタリングすることにしました。)コンパイル)。

私は(Linuxで)これを行う単純なプログラムを見つけることができませんでした。

しかし、これはより簡単な用途に使用することができる。私はただ私の中にいました。github.com/bstarynk/misc-basile/リポジトリC++プログラムログイン-gcc.cc(GPLv3+ ライセンス)と対応するビルドスクリプト編集履歴-gcc.sh

一般的な用途は次のとおりです。$HOME/bin/ 早いあなたのファイルにコンパイルされた実行可能 $PATHファイルlogged-gcclogged-g++シンボリックリンク(同じ$HOME/bin/ ディレクトリにあります)を追加し、シェルスクリプトを作成します。たとえば、次のようになります。

#!/bin/bash
# file  ~/bin/gcc which should be executable
export LOGGED_CFLAGS='-g -Wall'
export LOGGED_GCC=/usr/bin/gcc-10
exec $HOME/bin/logged-gcc "$@"

そして

#!/bin/bash
# file  ~/bin/g+ which should be executable
export LOGGED_CXXFLAGS='-g -Wall'
export LOGGED_GXX=/usr/bin/g++-10
exec $HOME/bin/logged-g++ "$@"

もちろん、走ってください

$HOME/bin/logged-gcc --help 

助けを求めて、

$HOME/bin/logged-gcc --version 

バージョン情報を取得します。

(実際には、$PATH上記のシェルスクリプトはシンボリックリンクを使用する賢いトリックで回避できます)

次に、(Debian で) を使用してcat /var/log/messagesロギングを確認します。


もちろん、単に命令をリダイレクトするのではなく、gccCPUg++と所要時間、入力ソースファイルのサイズなどを測定するのがポイントですgcc。これが「コンパイルコマンドロギング」の意味です。後でそれに関する統計を実行できることを意味します。

わかりました-time オプション-freport-timeまたはgcc.入力ソースファイルのサイズを測定しません。私も知っています。gccプラグイン機械類(参照)このドラフトレポートと古いGCCが溶けるプロジェクト)。

できるだけ透明にコンパイルコマンドを文書化してベンチマークしたいと思います。(たとえば、上記のトリックを使用してからmyに$PATH環境変数を設定するだけです。)LOGGER_SQLITE~/.zshrcそして未成年者高い(したがって、より多くのプロセスが分岐します。ロガー(1)または裏(1)はいいいえいくつかのコンパイル後のオプション(例:小さなCソースコード、私を参照)その他 - バーゼルリポジトリの例)は、10分の1秒未満持続できます。時間(7))。ベンチマークの作成gccプラグインバージョンによって異なる場合があります湾岸協力協議会Makefile、重すぎる可能性があるため、-s を次に変更する必要があります。移動するプラグインはすべてのコマンドで使用できますgcc

具体的なユースケースは次のとおりです。参照システム数ヶ月でプロジェクトを進めます(2021年初め)。ますます多くのC ++コードを生成するので、コンパイル時間は、特に複数の標準C ++を使用する場合は、より少ないがより大きなC ++ファイルを生成するのか、それよりも小さいがより小さいファイルを生成するのかを決定する必要があります。コンテナまたはGUIツールキット(例:FLTK生成された C++ コードから。

ベストアンサー1

おすすめ記事