aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-01-15 19:13:40 -0500
committerFranklin Wei <git@fwei.tk>2016-01-15 19:13:40 -0500
commit056220075ca575c17899abea7b3a2fb55e64b561 (patch)
treec9124b79c5ec4cfd0dda135671df6f99396bbe4f /Makefile
parent1a626ab0cbf368b8bb5e41d850f759229d7039cd (diff)
downloadnetcosm-056220075ca575c17899abea7b3a2fb55e64b561.zip
netcosm-056220075ca575c17899abea7b3a2fb55e64b561.tar.gz
netcosm-056220075ca575c17899abea7b3a2fb55e64b561.tar.bz2
netcosm-056220075ca575c17899abea7b3a2fb55e64b561.tar.xz
revamp makefile, work on objects
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile49
1 files changed, 44 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 6a17bdc..ca121ed 100644
--- a/Makefile
+++ b/Makefile
@@ -11,21 +11,60 @@ LDFLAGS = -lgcrypt -lev
HEADERS = src/*.h export/include/*.h
-all: $(OUT)/$(PLATFORM).bin Makefile SOURCES $(HEADERS)
+DEPS = $(NETCOSM_SRC:.c=.d)
+
+.PHONY: all
+all: $(OUT)/$(PLATFORM).bin Makefile SOURCES $(HEADERS) $(DEPS)
+
+%.o: %.c Makefile %.d
+ @echo "CC $<"
+ @$(CC) $(CFLAGS) $(OPTFLAGS) -c $< -o $@
$(OUT)/$(PLATFORM).bin: $(NETCOSM_OBJ) $(HEADERS) Makefile
@mkdir -p $(OUT)
- @echo "LD $<"
+ @echo "LD $@"
@$(CC) $(NETCOSM_OBJ) $(CFLAGS) $(LDFLAGS) -o $(OUT)/$(PLATFORM).bin
+# automatically generate dependency rules
+
+%.d : %.c
+ @echo "MKDEP $<"
+ @$(CC) $(CCFLAGS) -MF"$@" -MG -MM -MP -MT"$@" -MT"$(<:.c=.o)" "$<"
+
+# -MF write the generated dependency rule to a file
+# -MG assume missing headers will be generated and don't stop with an error
+# -MM generate dependency rule for prerequisite, skipping system headers
+# -MP add phony target for each header to prevent errors when header is missing
+# -MT add a target to the generated dependency
+
+-include $(DEPS)
+
+.PHONY: depend
+depend: $(DEPS)
+ @echo "Dependencies (re)generated."
+
+.PHONY: install
install: $(OUT)/$(PLATFORM).bin
@install $(OUT)/$(PLATFORM).bin /bin/netcosm
+.PHONY: clean
clean:
@echo "Cleaning build directory..."
@rm -f $(OUT)/$(PLATFORM).bin
@rm -f $(NETCOSM_OBJ)
-%.o: %.c Makefile $(HEADERS)
- @echo "CC $<"
- @$(CC) $(CFLAGS) $(OPTFLAGS) -c $< -o $@
+.PHONY: depclean
+depclean:
+ @echo "Cleaning dependencies..."
+ @rm -f $(DEPS)
+
+.PHONY: veryclean
+veryclean: clean depclean
+
+.PHONY: help
+help:
+ @echo "Cleaning targets:"
+ @echo " clean - Remove object files"
+ @echo " depclean - Remove dependency files"
+ @echo " veryclean - Remove object and dependency files"
+ @echo "Build targets:"