summaryrefslogtreecommitdiff
path: root/i/marvin/src/Makefile.defs
diff options
context:
space:
mode:
authorschodet2006-03-23 23:24:38 +0000
committerschodet2006-03-23 23:24:38 +0000
commitac3bba275a3fab5a32f23266d46bf0e88d157dbf (patch)
tree5e1673eb87f7968e3e6e2d9813cb1813e90b3d86 /i/marvin/src/Makefile.defs
parent7fcaa8a15fd9b6de7da0f183b96d765a9ed3cb99 (diff)
Compilation dans le sous répertoire obj.
Diffstat (limited to 'i/marvin/src/Makefile.defs')
-rw-r--r--i/marvin/src/Makefile.defs29
1 files changed, 23 insertions, 6 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: