User:Solar/Makefile: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
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:
MODULES := foo bar
.PHONY: clean mrproper
define MK_template
all:▼
include $(1)/build.mk
endef
define RULES_template
Line 16:
endef
define
bin/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES))) $(foreach library,$($(1)_LIBRARIES),lib/$(library))
ifeq ($(wildcard inc/$(1)),)▼
$$(LD) $$(LDFLAGS) $$(LDFLAGS_$(2)) $$^ -o $$@
$$(shell ln -s ../$(1)/inc inc/$(1))▼
endef
define ARCHIVE_template
lib/$(1): $(patsubst %,$(2)/obj/%.o,$(basename $($(1)_SOURCES)))
$$(AR) $$(ARFLAGS) $$@ $$?
endef
define INCLUDE_template
endif
endef
$(foreach
$(foreach
$(foreach
$(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:
Line 30 ⟶ 45:
mrproper: clean
$(RM) $(foreach mod,$(MODULES),$(mod)/obj/*.d)
</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 :=