# # Yoink # Use this file with make to compile and install Yoink. # # This makefile supports these targets: # all, install, clean, cleandist, run, debug # # This build system incorporates the ideas written by Emile van Bergen: # http://www.xs4all.nl/~evbergen/nonrecursive-make.html # # # Define some options. # # Set this to `yes' to echo each build command. verbose := no # # Include the configuration file, config.mk. # have_config := $(wildcard config.mk) ifneq ($(strip $(have_config)),) include config.mk else no_config: @echo "You must run the configure script before you can make anything." @exit 1 endif # # Some standard stuff. # .SUFFIXES: .SUFFIXES: .a .c .cc .cpp .o .rc all: targets # # Include the subdirectories--order is not important. # dir := src include $(dir)/rules.mk dir := data include $(dir)/rules.mk dir := doc include $(dir)/rules.mk # # Define some common rules. # CC_WRAPPER = ./build/compile.sh $(CC) CXX_WRAPPER = ./build/compile.sh $(CXX) ifeq ($(verbose),no) DO_CC = @echo " CC $@"; DO_CXX = @echo " CXX $@"; DO_LD = @echo " LD $@"; DO_LDX = @echo " LD $@"; DO_CCLD = @echo " CCLD $@"; DO_CXXLD = @echo " CXXLD $@"; DO_AR = @echo " AR $@"; DO_RC = @echo " RC $@"; endif DO_CC += $(CC_WRAPPER) $(CFLAGS) $(CF_TGT) -o $@ -c $< DO_CXX += $(CXX_WRAPPER) $(CXXFLAGS) $(CF_TGT) -o $@ -c $< DO_LD += $(CC_WRAPPER) $(LDFLAGS) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS) DO_LDX += $(CXX_WRAPPER) $(LDFLAGS) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS) DO_CCLD += $(CC_WRAPPER) $(CFLAGS) $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS) DO_CXXLD += $(CXX_WRAPPER) $(CXXFLAGS) $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS) DO_AR += $(AR) rcs $@ $^; $(RANLIB) $@ DO_RC += $(WINDRES) $(DDEFINES) $(DF_TGT) -o $@ -i $< %.o: %.c $(DO_CC) %.o: %.cc $(DO_CXX) %.o: %.cpp $(DO_CXX) %.o: %.rc $(DO_RC) %: %.o $(DO_LD) %: %.c $(DO_CCLD) %: %.cc $(DO_CXXLD) %: %.cpp $(DO_CXXLD) %.a: %.o $(DO_AR) # # Stuff. # #TGT_BIN := $(addsuffix $(EXEEXT),$(TGT_BIN)) # # Define the phony targets. # .PHONY: targets targets: $(TGT_BIN) $(TGT_LIB) .PHONY: clean clean: ifeq ($(verbose),yes) rm -f $(CLEAN) else @echo " CLEAN"; rm -f $(CLEAN) endif .PHONY: distclean distclean: clean ifeq ($(verbose),yes) rm -f config.mk else @rm -f config.mk endif .PHONY: install install: targets $(INSTALL) $(TGT_BIN) -m 755 -d $(DESTDIR)$(bindir) $(INSTALL) $(TGT_DATA) -m 644 -d $(DESTDIR)$(datadir) $(INSTALL) $(TGT_LIB) -m 750 -d $(DESTDIR)$(libdir) $(INSTALL) $(TGT_MAN) -m 644 -d $(DESTDIR)$(mandir) # # Prevent make from removing any build targets. # .SECONDARY: $(CLEAN)