2016-11-09 8 views
0

私はプロジェクトにある再帰的なメークファイルを持っていますが、なんらかの理由でARが出力を出力する唯一のコマンドです。静かなメークファイルが動作しない

どのように静かにすることができますか?それは冒頭にすでに '@'があり、出力をnullにパイプしたくありません。

私はこのメークファイルをどのように呼びますか?

@cd libc; make clean --no-print-directory 

ここではトラブルのmakefileです:

include ../Makefile.inc 

LIB=../libc.a 
SOURCES=$(wildcard *.c) 
SOURCES_ASM=$(wildcard asm/*.asm) 
OBJECTS=$(SOURCES:.c=.o) 
OBJECTS_ASM=$(SOURCES_ASM:.asm=.o) 

all: $(LIB) 
    @echo -e " libC  [ \033[0;32mOK \033[0m]" 

$(LIB): $(OBJECTS) $(OBJECTS_ASM) 
    @$(AR) $(ARFLAGS) -c $(LIB) $(OBJECTS_ASM) $(OBJECTS) 

$(OBJECTS): $(SOURCES) 

$(OBJECTS_ASM): $(SOURCES_ASM) 

%.o: %.c 
    @$(GCC) $(GCCFLAGS) -c $< -o [email protected] 

%.o: %.asm 
    @$(ASM) $(ASMFLAGS) $< -o [email protected] 

clean: 
    @rm -rf *.o ../*.a 

.PHONY: 
    all clean 

、ここでは出力です:私はあなたは、単にログファイルに標準出力をリダイレクトすることをお勧め事前

+1

'@'はコマンドを実行する前に 'make'がコマンドを出力しないようにします。コマンド自体からの出力は何もしません。 – melpomene

+0

ああ愚かな私。 stdoutをnullにリダイレクトする方法はありますか?その部分だけで、すべてではありませんか? – Juan

+0

何を飲みたいのか、何をstdoutに渡すのかを選択するプログラムにパイプします。例えば。それはあなたが保持したいと思う特定のパターンの行であれば、 'grep'が明らかです。 – melpomene

答えて

0

a - asm/syscall.o 
a - syscall.o 
a - string.o 
a - stdio.o 
a - integer.o 
    libC  [ OK ] 

おかげでARコマンドの場合のみ、次のようになります。

@$(AR) $(ARFLAGS) -c $(LIB) $(OBJECTS_ASM) $(OBJECTS) >> $(LOG_FILE) 

stderrをリダイレクトしないため、エラーが表示されたままになります。

1

arに出力を印刷したくない場合は、出力を停止してください。 :)あなたが私はあなたがGNUで行ったデフォルト値を、使用していると仮定しARFLAGSのための任意の設定を示していないので

rvあるとvフラグが「冗長」(man arを参照)を意味します。

ので、ちょうど設定:

ARFLAGS = r 

をメイクファイルには、arからの詳細な出力をオフにする必要があります。

関連する問題