11

make出力をフォーマットするにはどうすればよいですか(!!qmakeプロジェクトファイルを変更するだけです!!)。私のコンパイル行は増え続けており、1行の警告/エラーはそれらの間でほとんど消えています。

私は何かのようなことを考えています

$(CC) in.ext -o out.ext

よろしくお願いします

4

3 に答える 3

18

ではqmake、サイレント コンフィギュレーション オプションを追加できます。

CONFIG += silent

(注:それがコマンドだと思います。これに似たものです。)

これにより、ほとんどの出力が抑制され、警告とエラーとともに「コンパイル ao」のような行のみが出力されます。makeこれはの.SILENT.ディレクティブに似ていると思います (それだと思います...)

ただし、エラー パーサーが好んで使用する多くの情報が抑制されるため、注意が必要な場合があります。たとえば、SUBDIRS構成を使用してコンパイルしている場合、別のディレクトリに変更されたときに出力されません。

于 2009-09-29T15:14:51.190 に答える
5

さまざまなアプローチがあります。そして、それらを構成可能にすることができます。

  • ルール内の行の前に記号追加する@と、コマンド自体は表示されませんが、出力は表示されます。
  • 変数にを追加-WerrorするとCFLAGS(実際に変数がありますよね? それはよくあることです!)、警告を見逃すことはありません。ビルドは最初の警告の後で停止します。
  • コマンドの標準出力を にリダイレクトして/dev/null、エラー ストリームのみを残すことができます (gcc は通常出力を生成しませんが、他のコマンドには役立つ可能性があるため、これは特定のケースではありません)。

残念ながら、qmake2 番目のアプローチのみが適用されます。プロジェクト ファイルに追加します。

QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror

また、生成されたメイクファイルは、コンパイラを呼び出すときにこれらのフラグを使用するため、警告が発生するたびにビルドが停止します。


(このセクションは、別の質問が表示されるとすぐに別の質問に移動されます)。

通常の make では、すべてを使用できます。すべてを構成可能にすることができます。次に例を示します。

trace?=short

ifeq ($(trace),short)
  suppress_echo=@
  redirect_to_null=1>/dev/null

else ifeq ($(trace),full)
  suppress_echo=
  redirect_to_null=

else ifeq ($(trace),werror)
  CFLAGS+=-Werror

else
  $(error Incorrect trace type "$(trace)"!)
endif

# Thanks to Martin York for the source of this copy-pasted code
out.ext:  $(OBJ)
    @echo $(CC) $(CFLAGS) -o out.ext $(redirect_to_null)
    $(suppress_echo)$(CC) $(CFLAGS) -o out.ext $(OBJ) $(redirect_to_null)

したがって、次のように呼び出す場合make:

$ make trace=full

すべてを印刷します。呼び出す場合

$ make

値はshortデフォルトで使用され(?=通常の代わりに演算子に注意してください=!)、ルールはそのようなバージョンに展開されます

out.ext: out.o
    @echo cc  -o out.ext 1>/dev/null
    @cc  -o out.ext out.o 1>/dev/null

必要な分だけ与えるもの。

構成を伴うこのようなアプローチは、製品コードで使用されます。たとえば、Ubuntu の IcedTea makefile で見ました。

于 2009-09-29T11:51:52.970 に答える
0

「@」を使用して出力を抑制し、見たいものをエコーすることができます。

簡単な例:

out.ext:  $(OBJ)
    @echo $(CC) -o out.ext
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC)
于 2009-09-29T10:32:34.493 に答える