9

メイクが言うのをやめるにはどうすればいいですmake: Nothing to be done for 'all'.make: 'file' is up to date?何もしていないときはビルドをサイレントにしたいのですが、echoビルドの進行状況を追跡するために呼び出される場所は他にもあるので、このメッセージは混乱しているだけです。私は現在、このようにそれを沈黙させています:

all: dependency1 dependency2
    @:

もっと良い方法があるはずだと何かが教えてくれます。何か案は?

編集:

ただし、何かを構築する必要がある場合、コマンドエコーを機能させ続けたいと思います。私が望んでいることの良い例は、の線に沿ったものですが--no-print-directory、選択したメッセージをシャットダウンするための他のフラグが見つかりません。

4

6 に答える 6

7

ですから、ウェブを数日間読んだ後、私がやっていることよりも良い方法はないようです。一部の人々は、次のようなものを推奨しました。

all: dependency1 dependency2 | silent

silent:
    @:

つまり、silentターゲットに依存するだけで、物事を静めることができます。私は他の実行可能な解決策を思い付かなかったので、私は私が持っているもので行きます。

于 2010-02-12T23:59:58.530 に答える
6

多分make -s

于 2010-02-12T00:12:18.777 に答える
2

あなたは試してみるかもしれません...

$ make -q || make

この方法の利点は、何もすることがないときに何も出力されないことですが、makeは、続行する必要があるときに通常の出力を生成します...

于 2010-02-12T00:12:01.827 に答える
1

古いmake(1)のmanページから(メモリから)引用するには、バグセクション:makeを黙らせることができないことがいくつかあります。一方、-sまたは--silentオプションが役立つ場合があります。

于 2010-02-12T00:14:34.753 に答える
0

-sMAKEFLAGSを設定することにより、makefile自体で作成するコマンドライン引数を設定できます。明示的に印刷しない限り何も印刷されないため、次のmakefileを使用して呼び出されたコマンドをエコーし​​ます。

MAKEFLAGS += -s

PROJECT = progname
CC = g++
SDIR = src
ODIR = obj
BDIR = bin
IDIR = include
OBJS = $(patsubst $(SDIR)/%.cc,$(ODIR)/%.o,$(wildcard $(SDIR)/*.cc))

.PHONY: all debug clean

all: $(BDIR)/$(PROJECT)

debug: CFLAGS += -g -Wall -Wextra
debug: all

$(BDIR)/$(PROJECT): $(OBJS)
    @mkdir -p $(BDIR)
    @echo LINKING $<
    @$(CC) -o $@ $(OBJS) -I$(IDIR)

$(ODIR)/%.o: $(SDIR)/%.cc
    @mkdir -p $(ODIR)
    @echo "COMPILING $<"
    @$(CC) -o $@ -c $< $(CFLAGS)

clean:
    @echo "CLEAN"
    @rm -rf $(BDIR) $(ODIR)

MAKEFLAGS変数を削除すると、呼び出されたすべてのコマンドが出力されます。Makefileは、ソースファイル(拡張子.cc)がディレクトリに配置され、srcヘッダーファイルがディレクトリに配置されるc++プロジェクトをコンパイルしますinclude

于 2016-03-15T09:49:37.530 に答える
-2

make 2>&1 | egrep -v 'Nothing to be done|up to date'

于 2010-02-12T00:48:31.237 に答える