@Andy Misio ten makefile nie bierze pod uwagę plików h. Piszesz że „nie ma obowiązku dodawać nic ręcznie”, ale w ten sposób zmiana w pliku .h należącym do projektu nie będzie zauważona przez make.
Można sobie łatwo wyobrazić sytuację, w której zmieniamy wartość jakiegoś #define'a w pliku .h, i… nic się nie dzieje. Frustracja gwarantowana.
Oto jedno z rozwiązań:
# właściwie wszystko co potrzeba to podać listę plików .c w CFILES (można brać *.c ale wolę w ten sposób)
# i nazwę exeka
CFILES = plik1.c plik2.c main.c
EXEFILE = program
OBJFILES = $(subst .c,.o,$(CFILES))
DEPFILES = $(subst .c,.d,$(CFILES))
all: $(EXEFILE)
clean:
rm -f $(OBJFILES)
rm -f $(EXEFILE)
veryclean: clean
rm -f $(DEPFILES)
$(EXEFILE): $(OBJFILES)
gcc -o $@ $^
%.o: %.c
gcc -MMD -MP -MF $(subst .o,.d,$@) -c $<
-include $(DEPFILES)
.PHONY: clean
.DEFAULT_GOAL = all
Kwestię podzielenia tego na podkatalogi (żeby nie było wszystko razem do kupy) pozostawiamy czytelnikowi ;-)