安静的makefile无法正常工作

时间:2016-11-09 19:06:47

标签: makefile

所以我在一个项目上有一个递归的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 ]

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您不希望ar打印输出,请停止告诉它这样做! :)

由于您没有显示ARFLAGS的任何设置,我假设您使用的是默认值,GNU make中的默认值为rvv标志表示&#34;详细&#34; (见man ar)。

所以,只需设置:

ARFLAGS = r
makefile中的

应该关闭ar的详细输出。

答案 1 :(得分:0)

我建议您只需将stdout重定向到AR命令的日志文件,如下所示:

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

它会显示错误,因为它不会重定向stderr。