From ac3bba275a3fab5a32f23266d46bf0e88d157dbf Mon Sep 17 00:00:00 2001 From: schodet Date: Thu, 23 Mar 2006 23:24:38 +0000 Subject: Compilation dans le sous répertoire obj. --- i/marvin/src/Makefile.defs | 29 +++++++++++++++++++++++------ i/marvin/src/config/Makefile.defs | 6 +++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/i/marvin/src/Makefile.defs b/i/marvin/src/Makefile.defs index 09f35b0..45c40d7 100644 --- a/i/marvin/src/Makefile.defs +++ b/i/marvin/src/Makefile.defs @@ -26,45 +26,62 @@ SUBDIRS = utils utils/meta \ proto asserv \ motor +# Répertoire où placer les objets. +OBJ_DIR := obj + +# Utilise le compilateur C++ pour l'édition des liens. LINK.o = $(CXX) $(LDFLAGS) $(TARGET_ARCH) -LEX = flex -YACC = bison +# Et les outils GNU pour lex et yacc. +LEX := flex +YACC := bison +# Où trouver les sources, apdmc. vpath %.cc $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) vpath %.ll $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) vpath %.yy $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) +# régle par défault. Le build-all permet de reporter à plus tard sa +# définition. all: build-all # Inclus les autres répertoires. include $(SUBDIRS:%=$(SRCDIR)/%/Makefile.defs) \ $(EXTRA_SUBDIRS:%=%/Makefile.defs) -OBJECTS = $(filter %.o,$(foreach PROGRAM,$(PROGRAMS),$($(PROGRAM)_OBJECTS))) +OBJECTS := $(filter %.o,$(foreach PROGRAM,$(PROGRAMS),$($(PROGRAM)_OBJECTS))) +OBJECTS := $(OBJECTS:%.o=$(OBJ_DIR)/%.o) build-all: $(PROGRAMS) +# Fabrique les règles pour créer les exécutables. define PROGRAMS_template -$(1): $$($(1)_OBJECTS) +$(1): $$($(1)_OBJECTS:%.o=$$(OBJ_DIR)/%.o) + $$(LINK.o) $$^ $$(LOADLIBES) $$(LDLIBS) -o $$@ endef $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAMS_template,$(prog)))) -# Régles. +# Régles implicites. %.cc: %.ll $(LEX) $< %.cc: %.yy $(YACC) -o $@ $< +$(OBJ_DIR)/%.o: %.cc + @mkdir -p $(OBJ_DIR) + $(COMPILE.cc) $(OUTPUT_OPTION) $< + # Dépendances. -include $(OBJECTS:%.o=%.d) # Ménage. clean: - rm -f *.o *.d $(PROGRAMS) + rm -f $(OBJ_DIR)/*.o $(OBJ_DIR)/*.d $(PROGRAMS) rm -f *.bbg *.bb *.da *.gcov rm -f gmon.out rm -f $(EXTRA_CLEAN) + rmdir --ignore-fail-on-non-empty $(OBJ_DIR) .PHONY: all build-all clean +.SUFFIXES: diff --git a/i/marvin/src/config/Makefile.defs b/i/marvin/src/config/Makefile.defs index 15f72bb..823c9ea 100644 --- a/i/marvin/src/config/Makefile.defs +++ b/i/marvin/src/config/Makefile.defs @@ -7,8 +7,8 @@ test_config_data_OBJECTS = $(config_OBJECTS) test_config_data.o EXTRA_CLEAN += parser.hh parser.cc lexer.hh lexer.cc parser.hh: parser.cc -lexer.o: parser.hh +$(OBJ_DIR)/lexer.o: parser.hh lexer.hh: lexer.cc -parser.o: lexer.hh -config_parser.o: lexer.hh +$(OBJ_DIR)/parser.o: lexer.hh +$(OBJ_DIR)/config_parser.o: lexer.hh -- cgit v1.2.3