2016-11-09 5 views
0

Итак, у меня есть рекурсивный make-файл, который находится в проекте, но по какой-то причине AR является единственной командой, которая все еще печатает вывод.Тихий make-файл не работает

Как я могу заставить его молчать? Он уже «@» в начале, и я не хочу передавать вывод в нуль.

Как я называю этот make-файл?

@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 

и вот результат:

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 Make является rv и v флага означает «многословный» (см man ar).

Так, только установка:

ARFLAGS = r 

в вашем Makefile должен отключить подробный вывод из ar.

Смежные вопросы