diff --git a/Makefile.inc b/Makefile.inc index 7845ed6..6674a31 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -12,7 +12,7 @@ # file.c # # # Some optional values that can be omitted -# CONFIG = [release|profile|debug] [application|library] [dynamic|static] +# CONFIG = [release|profile|debug] [application|library] [dynamic|static] [qt] # CFLAGS = -Os # DEFINES = DEBUG OS_LINUX # INCLUDE_PATHS = ./include @@ -54,6 +54,14 @@ # +# Framework config options (currently only Qt) +# +FRAMEWORK += $(findstring qt,$(CONFIG)) +FRAMEWORK := $(FRAMEWORK: =) + + + +# # Setup defaults # ifeq ($(TARGET_DIR: =),) @@ -85,6 +93,35 @@ VERSION_MINOR=0 endif +# +# Framework settings +# +ifeq ($(FRAMEWORK),qt) + DEFINES += QT_WEBKITWIDGETS_LIB QT_QUICK_LIB QT_OPENGL_LIB QT_PRINTSUPPORT_LIB \ + QT_WEBKIT_LIB QT_QML_LIB QT_LOCATION_LIB QT_WIDGETS_LIB QT_NETWORK_LIB \ + QT_POSITIONING_LIB QT_SENSORS_LIB QT_GUI_LIB QT_CORE_LIB QT_QML_DEBUG \ + QT_DECLARATIVE_DEBUG _REENTRANT + QTDIR = /usr/include/qt5 + QMAKEDIR = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 + INCLUDE_PATHS += $(QMAKEDIR) $(QTDIR) $(QTDIR)/QtWebKitWidgets \ + $(QTDIR)/QtQuick $(QTDIR)/QtOpenGL $(QTDIR)/QtPrintSupport \ + $(QTDIR)/QtWebKit $(QTDIR)/QtQml $(QTDIR)/QtLocation \ + $(QTDIR)/QtWidgets $(QTDIR)/QtNetwork $(QTDIR)/QtPositioning \ + $(QTDIR)/QtSensors $(QTDIR)/QtGui $(QTDIR)/QtCore +# LIBRARY_PATHS += /usr/lib/x86_64-linux-gnu + LIBRARIES += png z Qt5WebKitWidgets Qt5Quick Qt5OpenGL Qt5PrintSupport Qt5WebKit \ + Qt5Qml Qt5Location Qt5Widgets Qt5Network Qt5Positioning Qt5Sensors \ + Qt5Gui Qt5Core GL pthread + + # Add the files we generate using moc to the sources + OBJECTS_PATH = $(OBJECTS_DIR)/$(OPTIMIZATION)/$(LINKING) + SOURCES += $(patsubst %.h,$(OBJECTS_PATH)/moc/%.cpp,$(HEADERS)) +# SOURCES += $(foreach HEADER,$(HEADERS), $(OBJECTS_PATH)/$(dir $(HEADER))/moc_$(basename $(notdir $(HEADER))).cpp ) +# SOURCES += $(foreach HEADER,$(HEADERS), $(OBJECTS_PATH)/moc/moc_$(basename $(notdir $(HEADER))).cpp ) +# SOURCES += $(patsubst %.ui,$(OBJECTS_PATH)/ui/%.cpp,$(FORMS)) +# SOURCES += $(patsubst %.qrc,$(OBJECTS_PATH)/rc/%.cpp,$(RESOURCES)) +endif + # # Flags @@ -109,6 +146,9 @@ LINK = $(TOOLCHAIN_PREFIX)g++ MKDIR = mkdir -p RM = rm -f +MOC = moc +UIC = uic +RCC = rcc # @@ -152,7 +192,9 @@ # This solution is better, but GCC specific $(DEPENDS): $(SOURCES) @$(MKDIR) $(dir $@) - @$(CC) $(CFLAGS) -MM $(SOURCES) | sed 's,^\(.*\.o\),$(OBJECTS_PATH)\/\1,' > $@ + @$(CXX) $(CXXFLAGS) -MM $(SOURCES) | sed 's,^\(.*\.o\),$(OBJECTS_PATH)\/\1,' > $@ + # $(foreach RES,$(RESOURCES),{ echo -n "$(patsubst %.qrc,$(OBJECTS_PATH)/rc/%.cpp,$(RES)): " ; $(RCC) --list $(RES) | tr '\n' ' ' ; } ' >> $@) + $(foreach HEADER,$(HEADERS), $(shell echo $(OBJECTS_PATH)/moc/moc_$(basename $(notdir $(HEADER))).cpp: $(HEADER) >> $@)) debug: $(MAKE) OPTIMIZATION=debug @@ -171,6 +213,20 @@ @$(MKDIR) $(dir $@) $(CXX) -c -o $@ $< $(CXXFLAGS) +# Qt rules +$(OBJECTS_PATH)/moc/%.cpp: %.h + @$(MKDIR) $(dir $@) + $(MOC) $(patsubst %,-D%,$(DEFINES)) $(patsubst %,-I%,$(INCLUDE_PATHS)) $< -o $@ + +$(OBJECTS_PATH)/ui/%.cpp: %.ui + @$(MKDIR) $(dir $@) + $(UIC) $(patsubst %,-D%,$(DEFINES)) $(patsubst %,-I%,$(INCLUDE_PATHS)) $< -o $@ + +$(OBJECTS_PATH)/rc/%.cpp: %.qrc + @$(MKDIR) $(dir $@) + $(RCC) -name $< $< -o $@ + + FAKE_TARGETS = debug release profile clean verify help all info null MAKE_TARGETS = $(MAKE) -rpn null | sed -n -e '/^$$/ { n ; /^[^ .\#][^ ]*:/ { s/:.*$$// ; p ; } ; }' REAL_TARGETS = $(MAKE_TARGETS) | sort | uniq | grep -E -v $(shell echo $(FAKE_TARGETS) | sed 's/ /\\|/g') @@ -199,6 +255,7 @@ @echo " $(LINKING) linking" @echo " $(OPTIMIZATION) optimization" @echo " $(TEMPLATE) template" + @echo " $(FRAMEWORK) framework" @echo " target: $(TARGET_BINARY)" @echo "" @echo " Make targets:"