Witam,
Zrobiłem sobie progress w makefile:
# progress
MAX = $(words $(OBJS))
N := 1
progress = $(eval P := $(shell expr $N '*' 100 '/' $(MAX)))$(eval L := $(shell expr length $P))$(eval L := $(shell expr 4 '-' $L))'\033[0;34m'[$(shell for (( i=1; i<$L; i++ )); do echo -n "\ ";done)$P%]$(eval N := $(shell expr $(N) '+' 1))
all: $(OUT)
# z tym mam problem, jak zapiszę %.elf, to po zakończeniu działania programu make, kasuje mi wszystkie pliki obiektowe
$(subst $(suffix $(OUT)),.elf,$(OUT)): $(LINKER_SCRIPT) $(OBJS)
@$(LD) -Map $(@:.elf=.map) $(LDFLAGS) -T $^ -o $@
@$(OD) $(ODFLAGS) $@ > $(@:.elf=.dump)
@$(SIZE) $@
%.o: %.c
@echo -e $(progress)'\033[0m\033[1m' CC $(subst $(KDIR)/,,$<)'\033[0;31m'
@$(CC) -MM $< -MF $*.d -MP $(INC)
@$(CC) -c $(CFLAGS) $< -o $@ $(INC)
@echo -ne '\033[0m'
%.o: %.S
@echo -e $(progress)'\033[0m\033[1m' AS $(subst $(KDIR)/,,$<)'\033[0;31m'
@$(AS) $(ASFLAGS) $< -o $@
@echo -ne '\033[0m'
Problem pojawia się, gdy make przekompilowywuje tylko pliki które się zmieniły.... W OBJS są wszystkie ścieżki do plików obiektowych(wygenerowane na podstawie źródeł - OBJS = $(CSRCS:.c=.o)). Wartość MAX określa ilość plików, jednak w tym przypadku jest to niepoprawne. Jest na to rada?