view Makefile.gen @ 78:159cc5f14092

Check for empty target directory in DO_MKDIR Makefile macro.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 14 Jan 2020 03:28:06 +0200
parents cc1c35357e39
children 8a56cb177711
line wrap: on
line source

###
### Compiler flags
###
CXXFLAGS += -O3 -W -Wall -std=c++11
LDFLAGS += 
CXXFLAGS += $(SDL_CFLAGS) $(GL_CFLAGS)


###
### Tools, paths and directories
###
MKDIR ?= mkdir
MKDIR_P ?= $(MKDIR) -p
BINPATH ?= ./


###
### Main targets and objects
###
BINARIES = gldragon ply2bin

TARGETS += \
	$(addprefix $(BINPATH),$(addsuffix $(BINEXT),$(BINARIES)))

NOBUILD_TARGETS +=
NOINST_TARGETS += 
CLEAN_TARGETS +=
DISTCLEAN_TARGETS += 


###
### Functions and compilation/link commands
###
ifneq ($(V),1)
DO_CMD=/bin/echo -E " $(1) $(2)" && $(3)
else
DO_CMD=/bin/echo -E $(3) && $(3)
endif
DO_MKDIR=if test ! -z "$(1)" -a ! -d "$(1)"; then /bin/echo -E " MKDIR $(1)"; mkdir -p "$(1)"; fi


COMPILE_C_OBJ = \
	@$(call DO_MKDIR,$(OBJPATH)) ; \
	$(call DO_CMD,CC,$<,$(CC) $(CFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))

LINK_C_BIN = \
	@$(call DO_MKDIR,$(BINPATH)) ; \
	$(call DO_CMD,LINK,$@,$(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))

COMPILE_CXX_OBJ = \
	@$(call DO_MKDIR,$(OBJPATH)) ; \
	$(call DO_CMD,CXX,$<,$(CXX) $(CXXFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))

LINK_CXX_BIN = \
	@$(call DO_MKDIR,$(BINPATH)) ; \
	$(call DO_CMD,LINK,$@,$(CXX) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))

LINK_STATIC_LIB = \
	@$(call DO_MKDIR,$(OBJPATH)) ; \
	$(call DO_CMD,AR,$@ $(filter %.o,$+),$(AR) cru $@ $(filter %.o,$+)) ; \
	$(call DO_CMD,RANLIB,$@,$(RANLIB) $@)


###
### Generic target rules
###
all: $(NOBUILD_TARGETS) $(NOINST_TARGETS) $(TARGETS)


$(OBJPATH)%.o: %.cpp %.h
	$(COMPILE_CXX_OBJ)

$(OBJPATH)%.o: %.cpp
	$(COMPILE_CXX_OBJ)


$(BINPATH)gldragon$(BINEXT): $(addprefix $(OBJPATH), gldragon.o dmglrender.o dmscene.o dmply.o dmutil.o)
	$(LINK_CXX_BIN) $(LDFLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS)

$(BINPATH)ply2bin$(BINEXT): $(addprefix $(OBJPATH), ply2bin.o dmscene.o dmply.o dmutil.o)
	$(LINK_CXX_BIN) $(LDFLAGS) $(TOOL_LDFLAGS)


###
### Special targets
###
clean:
	-$(RM) $(TARGETS) $(NOINST_TARGETS) $(CLEAN_TARGETS) $(OBJPATH)*.o

distclean: clean
	-$(RM) $(DISTCLEAN_TARGETS) *~ core *.core

.PHONY: clean distclean all