User:Solar/Makefile: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
No edit summary |
No edit summary |
||
Line 6: | Line 6: | ||
.PHONY: clean mrproper |
.PHONY: clean mrproper |
||
⚫ | |||
@echo "Default target." |
|||
define MK_template |
define MK_template |
||
Line 17: | Line 20: | ||
define PROGRAM_template |
define PROGRAM_template |
||
DEPENDENCIES := $(DEPENDENCIES) $(patsubst %,$(2)/obj/%.d,$(basename $($(1)_SOURCES))) |
|||
bin/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) $(foreach library,$($(1)_LIBRARIES),lib/$(library)) |
bin/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) $(foreach library,$($(1)_LIBRARIES),lib/$(library)) |
||
$$(LD) $$(LDFLAGS) $$(LDFLAGS_$(2)) $$^ -o $$@ |
$$(LD) $$(LDFLAGS) $$(LDFLAGS_$(2)) $$^ -o $$@ |
||
Line 22: | Line 26: | ||
define ARCHIVE_template |
define ARCHIVE_template |
||
DEPENDENCIES := $(DEPENDENCIES) $(patsubst %,$(2)/obj/%.d,$(basename $($(1)_SOURCES))) |
|||
lib/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) |
lib/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) |
||
$$(AR) $$(ARFLAGS) $$@ $$? |
$$(AR) $$(ARFLAGS) $$@ $$? |
||
Line 38: | Line 43: | ||
$(foreach module,$(MODULES),$(eval $(call INCLUDE_template,$(module)))) |
$(foreach module,$(MODULES),$(eval $(call INCLUDE_template,$(module)))) |
||
-include $(sort $(DEPENDENCIES)) |
|||
⚫ | |||
@echo "all" |
|||
clean: |
clean: |
Revision as of 16:41, 24 November 2011
MODULES := foo bar CFLAGS := -MMD -I includes ARFLAGS := rc .PHONY: clean mrproper all: @echo "Default target." define MK_template include $(1)/build.mk endef define RULES_template $(1)/obj/%.o: $(1)/src/%.c $$(CC) $$(CFLAGS) $$(CFLAGS_$(1)) -c $$< -o $$@ endef define PROGRAM_template DEPENDENCIES := $(DEPENDENCIES) $(patsubst %,$(2)/obj/%.d,$(basename $($(1)_SOURCES))) bin/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) $(foreach library,$($(1)_LIBRARIES),lib/$(library)) $$(LD) $$(LDFLAGS) $$(LDFLAGS_$(2)) $$^ -o $$@ endef define ARCHIVE_template DEPENDENCIES := $(DEPENDENCIES) $(patsubst %,$(2)/obj/%.d,$(basename $($(1)_SOURCES))) lib/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) $$(AR) $$(ARFLAGS) $$@ $$? endef define INCLUDE_template ifeq ($(wildcard includes/$(1)),) $$(shell ln -s ../$(1)/includes includes/$(1)) endif endef $(foreach module,$(MODULES),$(eval include $(module)/build.mk)) $(foreach module,$(MODULES),$(eval $(call RULES_template,$(module)))) $(foreach module,$(MODULES),$(eval $(foreach binary,$($(module)_PROGRAMS),$(call PROGRAM_template,$(binary),$(module))))) $(foreach module,$(MODULES),$(eval $(foreach library,$($(module)_ARCHIVES),$(call ARCHIVE_template,$(library),$(module))))) $(foreach module,$(MODULES),$(eval $(call INCLUDE_template,$(module)))) -include $(sort $(DEPENDENCIES)) clean: $(RM) $(foreach mod,$(MODULES),$(mod)/obj/*.o) mrproper: clean $(RM) $(foreach mod,$(MODULES),$(mod)/obj/*.d) includes/* bin/* lib/*
CFLAGS_foo := -Wall foo_PROGRAMS := foo foo_ARCHIVES := foolib.a foo_SOURCES := main.c foo_LIBRARIES := foolib.a foolib.a_SOURCES := foo_test.c