summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschodet2006-03-23 23:24:38 +0000
committerschodet2006-03-23 23:24:38 +0000
commitac3bba275a3fab5a32f23266d46bf0e88d157dbf (patch)
tree5e1673eb87f7968e3e6e2d9813cb1813e90b3d86
parent7fcaa8a15fd9b6de7da0f183b96d765a9ed3cb99 (diff)
Compilation dans le sous répertoire obj.
-rw-r--r--i/marvin/src/Makefile.defs29
-rw-r--r--i/marvin/src/config/Makefile.defs6
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