User:Solar/Makefile: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
m (New page: <pre> MODULES := foo bar WARNINGS := -Wall -Wextra -Werror AUTODEPS := -MMD CFLAGS := $(WARNINGS) $(AUTODEPS) -I inc .PHONY: clean mrproper all: define RULES_template $(1)/obj/%.o: $(...) |
No edit summary |
||
Line 2: | Line 2: | ||
MODULES := foo bar |
MODULES := foo bar |
||
CFLAGS := -MMD -I includes |
|||
ARFLAGS := rc |
|||
CFLAGS := $(WARNINGS) $(AUTODEPS) -I inc |
|||
.PHONY: clean mrproper |
.PHONY: clean mrproper |
||
define MK_template |
|||
⚫ | |||
include $(1)/build.mk |
|||
endef |
|||
define RULES_template |
define RULES_template |
||
Line 16: | Line 16: | ||
endef |
endef |
||
define |
define PROGRAM_template |
||
bin/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) $(foreach library,$($(1)_LIBRARIES),lib/$(library)) |
|||
⚫ | |||
$$(LD) $$(LDFLAGS) $$(LDFLAGS_$(2)) $$^ -o $$@ |
|||
⚫ | |||
endef |
|||
define ARCHIVE_template |
|||
lib/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) |
|||
$$(AR) $$(ARFLAGS) $$@ $$? |
|||
endef |
|||
define INCLUDE_template |
|||
⚫ | |||
⚫ | |||
endif |
endif |
||
endef |
endef |
||
$(foreach |
$(foreach module,$(MODULES),$(eval include $(module)/build.mk)) |
||
$(foreach |
$(foreach module,$(MODULES),$(eval $(call RULES_template,$(module)))) |
||
$(foreach |
$(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)))) |
|||
⚫ | |||
@echo "all" |
|||
clean: |
clean: |
||
Line 30: | Line 45: | ||
mrproper: clean |
mrproper: clean |
||
$(RM) $(foreach mod,$(MODULES),$(mod)/obj/*.d) |
$(RM) $(foreach mod,$(MODULES),$(mod)/obj/*.d) includes/* bin/* lib/* |
||
</pre> |
</pre> |
||
Revision as of 16:13, 24 November 2011
MODULES := foo bar CFLAGS := -MMD -I includes ARFLAGS := rc .PHONY: clean mrproper 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 bin/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) $(foreach library,$($(1)_LIBRARIES),lib/$(library)) $$(LD) $$(LDFLAGS) $$(LDFLAGS_$(2)) $$^ -o $$@ endef define ARCHIVE_template 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)))) all: @echo "all" clean: $(RM) $(foreach mod,$(MODULES),$(mod)/obj/*.o) mrproper: clean $(RM) $(foreach mod,$(MODULES),$(mod)/obj/*.d) includes/* bin/* lib/*
CFLAGS_foo :=