QMake dazu bringen, eine richtige .app zu generieren
Frage
Ich habe ein großes spannendes C++-Projekt, das Folgendes beinhaltet:
- 4 Anwendungen
- Über 50 Bibliotheken
- Über 20 Bibliotheken von Drittanbietern
Das Projekt verwendet QMake (Teil von Trolltechs Qt), um die Produktionsversion unter Linux zu erstellen, aber ich habe damit herumgespielt, sie unter MacOS zu erstellen.
Ich kann mit QMake problemlos in MacOS integrieren, habe aber Probleme beim Erstellen der endgültigen .app.Es müssen alle Frameworks und dynamischen Bibliotheken von Drittanbietern sowie alle dynamischen Bibliotheken des Projekts gesammelt und sichergestellt werden, dass die Anwendung sie findet.
Ich habe online über die Verwendung von install_name_tool gelesen, habe mich aber gefragt, ob es einen Prozess zur Automatisierung gibt.
(Vielleicht ist die Antwort die Verwendung von XCode, siehe verwandte Frage, aber es würde Probleme beim Erstellen von uic und moc geben.)
Danke
Lösung
Andere Tipps
Wir haben das gleiche Problem bei Last.fm. Ich habe mir DeployQt angesehen und es nützt nicht viel, wenn Sie Bibliotheken von Drittanbietern haben.Am Ende habe ich ein Perl-Skript geschrieben, das ein Makefile generiert, mit dem Sie eine .app- und/oder .dmg-Datei generieren können.
Ich habe es hier hochgeladen: http://www.methylblue.com/detritus/QMake.dmg/
Um es zu verwenden, fügen Sie Folgendes zur Profildatei Ihrer Anwendung hinzu:
macx*:!macx-xcode:release {
system( QT=\'$$QT\' QMAKE_LIBDIR_QT=\'$$QMAKE_LIBDIR_QT\' $$ROOT_DIR/common/dist/mac/Makefile.dmg.pl $$DESTDIR $$VERSION $$LIBS > Makefile.dmg )
QMAKE_EXTRA_INCLUDES += Makefile.dmg
}
Ich bin mir sicher, dass noch nicht alles portabel ist, aber es wäre gut, wenn jemand anderes es nutzen und prüfen würde, ob das der Fall ist.
Dies ist im Grunde die erste offizielle Veröffentlichung dieses Codes. Bitte senden Sie mir Fehlerberichte und auch Verbesserungen.Danke.
Ich habe dieses Problem vollständig umgangen, indem ich meine Qt-App statisch unter OS X erstellt habe.Das ist für Sie jedoch möglicherweise nicht praktikabel.