view Makefile.gen @ 52:1ac8fdd932b3

More work on build system.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 07 Apr 2017 17:27:01 +0300
parents 402446a76794
children a7961956858c
line wrap: on
line source

###
### Main build file
###

# Tools
CC = $(BINTOOL_PREFIX)gcc
CXX = $(BINTOOL_PREFIX)g++
AR = $(BINTOOL_PREFIX)ar
RANLIB = $(BINTOOL_PREFIX)ranlib
WINDRES = $(BINTOOL_PREFIX)windres

INSTALL ?= install
MKDIR ?= mkdir
MKDIR_P ?= $(MKDIR) -p

# Common defines
DEFINES += -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_SQL_LIB -DQT_CORE_LIB

# Application stuff
APP_BIN=$(BINPATH)Syntilista$(EXEEXT)
APP_OBJS=main.o qrc_Syntilista.o moc_main.o
APP_VERSION := $(shell cat VERSION)
comma:= ,
APP_VERSION_COM := $(subst .,$(comma),$(APP_VERSION))
CXXFLAGS += -DAPP_VERSION=\"$(APP_VERSION)\"

LOGO_SVG ?= kampuscafe4.svg
ICON_PNGS = icon-64.png icon-48.png icon-32.png icon-16.png


# And target lists
TARGETS = $(APP_BIN)
NOBUILD_TARGETS += $(OBJPATH) $(BINPATH)
NOINST_TARGETS +=
DISTCLEAN_TARGETS += icon.ico $(ICON_PNGS) moc_*.cpp ui_*.h


###
### Target rules
###
all: $(NOBUILD_TARGETS) $(NOINST_TARGETS) $(TARGETS)


moc_predefs.h:
	@echo "" > $(OBJPATH)dummy.cpp
	@$(CXX) $(CXXFLAGS) -dM -E -o $@ $(OBJPATH)dummy.cpp

moc_%.cpp: %.h $(QT_MOC_RULES)
	@echo " Qt::MOC $@ $<"
	@$(QT_MOC) $(DEFINES) $(QT_MOC_FLAGS) $(INCPATH) $< -o $@

ui_%.h: %.ui
	@echo " Qt:UIC $@ $<"
	@$(QT_UIC) $(QT_UIC_FLAGS) $< -o $@


$(OBJPATH) $(BINPATH):
	@echo " MKDIR $@"
	@$(MKDIR_P) $@

$(OBJPATH)%.o: %.cpp %.h
	@echo " CXX $@"
	@$(CXX) $(CXXFLAGS) $(DEFINES) $(INCPATH) -c -o $@ $<

$(OBJPATH)%.o: %.cpp
	@echo " CXX $@"
	@$(CXX) $(CXXFLAGS) $(DEFINES) $(INCPATH) -c -o $@ $<



###
### Windows specific rules
###
resource.rc: resource.rc.in icon.ico VERSION
	@sed -e "s/@APP_VERSION@/$(APP_VERSION)/g;s/@APP_VERSION_COM@/$(APP_VERSION_COM)/g;s#@APP_EXE@#$(notdir $(APP_BIN))#g" < $< > $@

$(OBJPATH)%.o: %.rc
	@echo " WINDRES $<"
	@$(WINDRES) $< -O coff -o $@


###
### Application rules
###
icon-%.png: $(LOGO_SVG)
	inkscape --export-area-page -w $(patsubst icon-%.png,%,$@) -h $(patsubst icon-%.png,%,$@) -e "$@" "$<"

logo.png: $(LOGO_SVG)
	inkscape --export-area-page -w 320 -h 280 -e "$@" "$<"

icon.ico: $(ICON_PNGS)
	@echo " CONVERT $+ -> $@"
	@convert $+ $@

qrc_Syntilista.cpp: Syntilista.qrc logo.png $(ICON_PNGS)
	@echo " Qt:RCC $@ $<"
	@$(QT_RCC) -name "Syntilista" $< -o $@

$(OBJPATH)main.o: main.cpp main.h ui_mainwindow.h ui_editperson.h
	@echo " CXX $@"
	@$(CXX) $(CXXFLAGS) $(DEFINES) $(INCPATH) -c -o $@ $<


$(APP_BIN): $(addprefix $(OBJPATH),$(APP_OBJS)) $(APP_DEP_LIBS) | $(APP_DEPS)
	@echo " LINK $@"
	@$(CXX) $(LDFLAGS) -o $@ $+ $(APP_LIBS)


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

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

.PHONY: clean distclean all