将百分比显示添加到 makefile 输出

Add Percentage display to makefile output

我当前的 Makefile 运行良好,但在编译时却没有漂亮的输出。如何添加带百分比的输出?

EXEC = hawk
SOURCES = $(wildcard src/collections/*.c src/compiler/*.c src/*.c)
OBJECTS = $(SOURCES:.c=.o)
CFLAGS = -Wall -O3 -Isrc/include/
BINDIR = build/bin
BUILDDIR = build
BUILDOBJ = $(addprefix build/, $(OBJECTS))

all: dir $(EXEC)

$(EXEC): $(OBJECTS)
    echo $(SOURCES)
    echo $(OBJECTS)
    gcc  $(BUILDOBJ) $(CFLAGS) -o $(BINDIR)/$(EXEC)
    @cp build/bin/hawk .

$(OBJECTS): %.o : %.c
    gcc -c $(CFLAGS) $< -o $(BUILDDIR)/$@

clean:
    -rm -rf build/*

dir:
    @mkdir -p build
    @mkdir -p build/bin
    @mkdir -p build/src
    @mkdir -p build/src/compiler
    @mkdir -p build/src/collections

通常你不能。但是你的 makefile 非常简单,允许你做一些事情。

你知道所有的编译单元,因为你在 OBJECTS 中有它们。这些对象将在 $(EXEC): $(OBJECTS) 的先决条件中出现的其他对象中编译。因此,您可以做的一件简单的事情就是将输出添加到编译这些对象的模式规则:$(OBJECTS): %.o : %.c。检查当前目标 $@$(OBJECTS) 的距离,将其转换为百分比并打印出来。

目的是什么?它会增加 Makefile 的复杂性以使其准确。考虑未编译的文件(因为它们是最新的)和并行编译(认为 make -j)不会使其更容易实现。如果您想要 CMake 风格的输出,只需使用 CMake - 它们会通过相当复杂的一堆递归 Makefile 和临时文件生成进度。

在我看来,添加百分比输出不值得这么复杂。为了找出进展是什么,我将按字母顺序定义对象,如 OBJECTS := $(sort $(SOURCES:.c=.o)),因此人们可以通过查看输出文件名来猜测编译的进度。