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?