2016-11-09 34 views
0

所以我有一個項目上的遞歸生成文件,但由於某種原因,AR是仍然打印輸出的唯一命令。安靜的makefile不起作用

我該如何強制它安靜?它在開始處已經有'@'了,我不想將輸出管道設置爲空。

我怎麼稱呼這個makefile?

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

這裏的麻煩製造者生成文件:

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 

和這裏的輸出:

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

在此先感謝

+1

'@'只是防止'make'在執行之前打印命令。它對命令本身的輸出沒有任何作用。 – melpomene

+0

哦,我太笨了。有沒有辦法將stdout重定向到null,但只有一部分,而不是全部? – Juan

+0

將其編入一個程序,該程序選擇吞下什麼以及將什麼傳遞給標準輸出。例如。如果你想要保留某些模式的行,'grep'是明顯的選擇。 – melpomene

回答

0

我建議你只需將標準輸出重定向到一個日誌文件僅適用於AR命令,如下所示:

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

它保持錯誤顯示,因爲它不重定向stderr。

1

如果您不想讓ar打印輸出,請停止告訴它! :)

既然你還沒有表現出對ARFLAGS我假設你使用默認值,這在GNU做任何設置爲rvv標誌意味着「冗長」(見man ar)。

所以,僅僅設置:

ARFLAGS = r 

在你的makefile應該從ar關閉詳細輸出。