2016-05-25 3 views
0

これは私の問題です。私はbashにビルドスクリプトを書いて、出力をteeにパイプし、さまざまな出力をさまざまなログファイルにソートします(最後にエラー/警告を要約し、ビルドされたファイルに関するいくつかの統計を得ることができます)。私はgccからの出力をcolorizeするためにcolorgcc perlスクリプト(colorgcc.1.3.2)を使いたいと思っていました。そして、スクリプトがそれが何かに書いているかどうかをチェックするので、 tty。このチェックを無効にして、完全ビルドを行い、別のグループから受け取ったコードの一部がC依存ファイルをビルドすることを発見しました(私たちはこのコードを変更せず、変更するか、オプション)。それは警告/エラーメッセージに十分近いので、
filename.o filename.d : filename.c \
dependant_file1.h \
dependant_file2.h (and so on for however many dependencies there are)
colorgccのperlスクリプトで、tty以外の出力を有効にしてCの依存ファイルに書き込む

はGCCからのこの出力は、.dのファイルに書き込まれますが、:

問題は、これらの.dファイルは次のようにフォームを持っているということですcolorgccはカラーコードを出力します(filename:lineno:messageのチェックではありますが、確かに100%ではないと確信しています)。filename:messageのチェックはGCCOUT whileループです。私は正規表現を編集しようとしましたが、これにマッチしないようにしようとしましたが、私のperl-fuはかなり弱いです。だから、私が結んだのは、これらの依存関係ファイルの各行に色分けされたコードなので、明らかにビルドが失敗することになります。

! -t STDOUTのチェックをNO_COLOR envarのチェックで置き換えてしまいました。これらのディレクトリのビルドスクリプトで設定を解除し、設定を解除しました(非ttyの場合は以前の動作をエミュレートします)。これは完全なスクリプトを実行すると素晴らしいですが、私がディレクトリにcdしてmakeを実行しても(明らかに手動で設定して設定を解除すると動作しますが、毎回行う苦労です)誰でも、このスクリプトがカラーコードを依存ファイルに書き込まないようにする方法はありますか?

+1

概要を試してみましょう:スクリプトを使用して出力を色づけし、それをハックしてファイル出力用のカラーコードを生成しました(通常はそうではありません)、今度はカラーコードを取り除きたいのですか?単純な答え:あなたのハッキングを削除します。 – Olaf

+0

Cタグの追加をやめてください。これはCとは関係なくビルドシステムです。 「C依存ファイル」はありません。 – Olaf

答えて

0

ここで私はこの問題を回避しました。 colorgccに次の行を追加して、gccの入力を検索して.dファイルを生成し、その場合は直接コンパイラを呼び出すようにしました。これは元のTTYチェックの代わりに挿入されました。

for each $argnum (0 .. $#ARGV) { if ($ARGV[$argnum] =~ m/-M{1,2}/) { exec $compiler, @ARGV or die("Couldn't exec"); } }

これは操作のこの種を行うための適切な「perlの方法であれば、私は知りませんが、それは動作するようです。 .dファイルをビルドする内部ディレクトリをコンパイルすると、カラーコードが挿入されなくなり、ソースファイルビルドも(私が望むように端末とログファイルの両方に)ビルドできます。私は時々答えがより多くのハッキングであると思う "ねえ、あなたはあきらめてみましたか?"

関連する問題