6.9. Benutzung von Qt

6.9.1. Ports, die Qt benötigen

Tabelle 6.7. Variablen für Ports, die Qt benötigen
USE_QT_VERDer Port benutzt das Qt-Toolkit. Mögliche Werte sind 3 und 4; diese spezifizieren die Major Version von Qt, die benutzt werden soll. Entsprechende Parameter werden an das configure-Skript und make übergeben.
QT_PREFIXEnthält den Pfad, wohin Qt installiert ist (nur lesbare Variable).
MOCEnthält den Pfad von moc (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Werts.
QTCPPFLAGSZusätzliche Compiler-Flags, die über CONFIGURE_ENV an das Qt-Toolkit übergeben werden. Voreingestellt entsprechend des USE_QT_VER-Wertes.
QTCFGLIBSZusätzliche Bibliotheken, die über CONFIGURE_ENV für das Qt-Toolkit gelinkt werden sollen. Voreingestellt entsprechend des USE_QT_VER-Wertes.
QTNONSTANDARDÄnderungen von CONFIGURE_ENV, CONFIGURE_ARGS und MAKE_ENV sollen unterdrückt werden.

Tabelle 6.8. Zusätzliche Variablen für Ports, die Qt 4.xi benutzen
QT_COMPONENTSSpezifiziert Tool– und Bibliothek-Abhängigkeiten für Qt4. Siehe unten für Details.
UICEnthält den Pfad von uic (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Wertes.
QMAKEEnthält den Pfad von qmake (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Wertes.
QMAKESPECEnthält den Pfad der Konfigurationsdatei für qmake (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Wertes.

Wenn USE_QT_VER gesetzt ist, werden dem configure-Skript einige nützliche Einstellungen übergeben:

CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \
	         --with-qt-libraries=${QT_PREFIX}/lib \
	         --with-extra-libs=${LOCALBASE}/lib \
	         --with-extra-includes=${LOCALBASE}/include
CONFIGURE_ENV+=  MOC="${MOC}" CPPFLAGS="${CPPFLAGS} ${QTCPPFLAGS}" LIBS="${QTCFGLIBS}" \
	         QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"

Wenn USE_QT_VER auf 4 gesetzt ist, werden auch die folgenden Einstellungen übergeben:

CONFIGURE_ENV+= UIC="${UIC}" QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}"
MAKE_ENV+=      QMAKESPEC="${QMAKESPEC}"

6.9.2. Komponentenauswahl (nur bei Qt 4.x)

Wenn USE_QT_VER auf 4 gesetzt ist, können individuelle Qt4-Tool- und Bibliotheksabhängigkeiten in der Variable QT_COMPONENTS angegeben werden. An jede Komponente kann _build oder _run als Suffix angehängt werden, was eine Abhängigkeit zur Build- bzw. Laufzeit angibt. Ohne Suffix gilt die Abhängigkeit sowohl zur Build- als auch zur Laufzeit. Bibliothekskomponenten sollten normalerweise ohne Suffix angegeben werden, Tool-Komponenten mit _build und Plugin-Komponenten mit _run. Die gebräuchlichsten Komponenten werden im Folgenden angegeben (alle verfügbaren Komponenten sind in _QT_COMPONENTS_ALL in /usr/ports/Mk/bsd.qt.mk aufgelistet):

Tabelle 6.9. Verfügbare Qt4-Bibliothekskomponenten
NameBeschreibung
corelibKern-Bibliothek (kann weggelassen werden– es sei denn, der Port benutzt nichts außer corelib)
guiGraphische Benutzeroberflächen-Bibliothek
networkNetzwerk-Bibliothek
openglOpenGL-Bibliothek
qt3supportQt3-Kompatibilitäts-Bibliothek
qtestlibModultest-Bibliothek
scriptSkript-Bibliothek
sqlSQL-Bibliothek
xmlXML-Bibliothek

Sie können herausfinden, welche Bibliotheken die Applikation benötigt, indem Sie nach erfolgreicher Kompilierung ldd auf die Hauptbinärdatei anwenden.

Tabelle 6.10. Verfügbare Qt4-Tool-Komponenten
NameBeschreibung
mocmeta object compiler (wird zum Build fast jeder Qt-Applikation benötigt)
qmakeMakefile-Generator / Build-Werkzeug
rccResource-Compiler (wird benötigt, falls die Applikation *.rc oder *.qrc Dateien enthält)
uicUser-Interface-Compiler (wird benötigt, falls die Applikation von Qt-Designer erzeugte *.ui Dateien enthält - gilt für praktisch jede Qt-Applikation mit einer GUI)

Tabelle 6.11. Verfügbare Qt4-Plugin-Komponenten
NameBeschreibung
iconenginesSVG-Icon-Engine Plugin (wenn die Applikation SVG-Icons mitliefert)
imageformatsBildformatplugins für GIF, JPEG, MNG und SVG (wenn die Applikation Bilddateien mitliefert)

Beispiel 6.3. Qt4-Komponenten auswählen

In diesem Beispiel benutzt die portierte Applikation die Qt4 GUI-Bibliothek, die Qt4-Core-Bibliothek, alle Qt4-Codeerzeugungstools und Qt4's Makefile Generator. Da die GUI-Bibliothek eine Abhängigkeit von der Core-Bibliothek impliziert, muss corelib nicht angegeben werden. Die Qt4-Codeerzeugungstools moc, uic und rcc, sowie der Makefile Generator qmake werden nur für den Build benötigt, deshalb bekommen die den Suffix _build:

USE_QT_VER=    4
QT_COMPONENTS= gui moc_build qmake_build rcc_build uic_build

6.9.3. Zusätzliche Besonderheiten

Wenn die Applikation keine configure Datei, sondern eine .pro Datei hat, können Sie das Folgende benutzen:

HAS_CONFIGURE=    yes

do-configure:
	@cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \
	        ${QMAKE} -unix PREFIX=${PREFIX} texmaker.pro

Beachten Sie die Ähnlichkeit mit der qmake-Zeile im mitgelieferten BUILD.sh-Skript. Die Übergabe von CONFIGURE_ENV stellt sicher, dass qmake die QMAKESPEC-Variable übergeben bekommt, ohne die es nicht funktioniert. qmake erzeugt Standard-Makefiles, sodass es nicht nötig ist ein eigenes neues build-Target zu schreiben.

Qt-Applikationen sind oft so geschrieben, dass sie plattformübergreifend sind, und oft ist X11/Unix nicht die Plattform, auf der sie entwickelt werden. Das sorgt oft für bestimmte fehlende Kleinigkeiten wie z.B.:

  • Fehlende zusätzliche Include-Pfade. Viele Applikationen kommen mit System-Tray-Icon Support– unterlassen es aber Includes oder Bibliotheken in den X11 Verzeichnissen zu suchen. Sie können qmake über die Kommandozeile sagen, es soll Verzeichnisse zu den Include- und Bibliotheks-Suchpfaden hinzufügen - z.B.:

    ${QMAKE} -unix PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \
        LIBS+=-L${LOCALBASE}/lib sillyapp.pro
  • Falsche Installations-Pfade. Manchmal werden Daten wie Icons oder .desktop-Dateien per Vorgabe in Verzeichnisse installiert, die nicht von XDG-kompatiblen Applikationen durchsucht werden. editors/texmaker ist hierfür ein Beispiel– siehe patch-texmaker.pro im files-Verzeichnis dieses Ports als eine Vorlage, die zeigt, wie man dies direkt in der Qmake Projektdatei löst.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.