Fix makefile not recompiling on header change

We currently do not keep track of header files in our Makefile so if one
is changed it can lead to multiple incompatible binary files being
linked. Instead we now create dependency lists for each source file and
recompile them if the need arises.

Fixes #594
This commit is contained in:
Nikos Tsipinakis 2019-01-26 22:04:22 +02:00
parent dd6320a0a9
commit e288fe4b93
2 changed files with 10 additions and 5 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
*.o *.o
*.d
*.gcda *.gcda
*.gcno *.gcno
*.gcov *.gcov

View File

@ -42,13 +42,15 @@ $(error "$(PKG_CONFIG) failed!")
endif endif
endif endif
CFLAGS := ${DEFAULT_CPPFLAGS} ${CPPFLAGS} ${DEFAULT_CFLAGS} ${CFLAGS} ${INCS} CFLAGS := ${DEFAULT_CPPFLAGS} ${CPPFLAGS} ${DEFAULT_CFLAGS} ${CFLAGS} ${INCS} -MMD -MP
LDFLAGS := ${DEFAULT_LDFLAGS} ${LDFLAGS} ${LIBS} LDFLAGS := ${DEFAULT_LDFLAGS} ${LDFLAGS} ${LIBS}
SRC := $(sort $(shell find src/ -name '*.c')) SRC := $(sort $(shell find src/ -name '*.c'))
OBJ := ${SRC:.c=.o} OBJ := ${SRC:.c=.o}
TEST_SRC := $(sort $(shell find test/ -name '*.c')) TEST_SRC := $(sort $(shell find test/ -name '*.c'))
TEST_OBJ := $(TEST_SRC:.c=.o) TEST_OBJ := $(TEST_SRC:.c=.o)
DEPS := ${SRC:.c=.d} ${TEST_SRC:.c=.d}
.PHONY: all debug .PHONY: all debug
all: doc dunst service all: doc dunst service
@ -58,11 +60,13 @@ debug: LDFLAGS += ${LDFLAGS_DEBUG}
debug: CPPFLAGS += ${CPPFLAGS_DEBUG} debug: CPPFLAGS += ${CPPFLAGS_DEBUG}
debug: all debug: all
-include $(DEPS)
${OBJ} ${TEST_OBJ}: Makefile config.mk
%.o: %.c %.o: %.c
${CC} -o $@ -c $< ${CFLAGS} ${CC} -o $@ -c $< ${CFLAGS}
${OBJ}: config.mk
dunst: ${OBJ} main.o dunst: ${OBJ} main.o
${CC} -o ${@} ${OBJ} main.o ${CFLAGS} ${LDFLAGS} ${CC} -o ${@} ${OBJ} main.o ${CFLAGS} ${LDFLAGS}
@ -122,7 +126,7 @@ endif
clean: clean-dunst clean-dunstify clean-doc clean-tests clean-coverage clean-coverage-run clean: clean-dunst clean-dunstify clean-doc clean-tests clean-coverage clean-coverage-run
clean-dunst: clean-dunst:
rm -f dunst ${OBJ} main.o rm -f dunst ${OBJ} main.o main.d ${DEPS}
rm -f org.knopwob.dunst.service rm -f org.knopwob.dunst.service
rm -f dunst.systemd.service rm -f dunst.systemd.service
@ -136,7 +140,7 @@ clean-doc:
rm -fr docs/internal/coverage rm -fr docs/internal/coverage
clean-tests: clean-tests:
rm -f test/test test/*.o rm -f test/test test/*.o test/*.d
clean-coverage: clean-coverage-run clean-coverage: clean-coverage-run
find . -type f -name '*.gcno' -delete find . -type f -name '*.gcno' -delete