所以我在一个项目上有一个递归的makefile,但由于某种原因,AR是唯一仍然打印输出的命令。
我怎样才能强迫它安静?它已经' @'在开始时,我不想将输出传递给null。
我如何调用此makefile?
@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 $@
%.o: %.asm
@$(ASM) $(ASMFLAGS) $< -o $@
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 ]
提前致谢
答案 0 :(得分:1)
如果您不希望ar
打印输出,请停止告诉它这样做! :)
由于您没有显示ARFLAGS
的任何设置,我假设您使用的是默认值,GNU make中的默认值为rv
且v
标志表示&#34;详细&#34; (见man ar
)。
所以,只需设置:
ARFLAGS = r
makefile中的应该关闭ar
的详细输出。
答案 1 :(得分:0)
我建议您只需将stdout重定向到AR命令的日志文件,如下所示:
@$(AR) $(ARFLAGS) -c $(LIB) $(OBJECTS_ASM) $(OBJECTS) >> $(LOG_FILE)
它会显示错误,因为它不会重定向stderr。