# Flags. CXXFLAGS = -Wall -g CPPFLAGS = -MMD $(INCLUDES) INCLUDES = -I$(SRCDIR) -I. # Tests de coverage (man gcov). ifeq ($(COV),) CXXFLAGS += -O2 else CXXFLAGS += -fprofile-arcs -ftest-coverage endif # Profiling (man gprof). ifneq ($(PROF),) CXXFLAGS += -pg LDFLAGS += -pg endif # Messages sur une ligne. CXXFLAGS += -fmessage-length=0 SUBDIRS = utils utils/meta \ tester \ log serial timer \ config data scheduler \ proto asserv \ motor LINK.o = $(CXX) $(LDFLAGS) $(TARGET_ARCH) LEX = flex YACC = bison vpath %.cc $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) vpath %.ll $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) vpath %.yy $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) 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))) build-all: $(PROGRAMS) define PROGRAMS_template $(1): $$($(1)_OBJECTS) endef $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAMS_template,$(prog)))) # Régles. %.cc: %.ll $(LEX) $< %.cc: %.yy $(YACC) -o $@ $< # Dépendances. -include $(OBJECTS:%.o=%.d) # Ménage. clean: rm -f *.o *.d $(PROGRAMS) rm -f *.bbg *.bb *.da *.gcov rm -f gmon.out rm -f $(EXTRA_CLEAN) .PHONY: all build-all clean