CMake MacOS X-Bundle mit BundleUtiliies für Qt-Anwendung

Ich bin ein CMake-Anfänger und habe ein Problem mit der Erstellung eines Qt-Anwendungspakets für MacOS X. Betrachten wir eine einfache Widget-App "helloworld" in nur einemmain.cpp Datei

// main.cpp
#include <QApplication>
#include <QLabel>

int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QLabel lbl("Hello");
    lbl.show();
    return app.exec();
}

DasCMakeLists.txt -Datei ist auch einfach.

# CMakeLists.txt
cmake_minimum_required( VERSION 3.0 )
project( QtBundle )    
set( CMAKE_INCLUDE_CURRENT_DIR ON )
set( CMAKE_AUTOMOC ON )

set( SOURCES main.cpp )    
find_package( Qt5Widgets REQUIRED )

add_executable( ${PROJECT_NAME} MACOSX_BUNDLE ${SOURCES} )    
qt5_use_modules( ${PROJECT_NAME} Widgets )

Ich rennecmake .. -DCMAKE_PREFIX_PATH=/path/to/Qt5.5.1/ und es erzeugtMakefile in dembuild Verzeichnis

Dann laufe ichmake und habenQtBundle.app Verzeichnis wie ich wollte undQtBundle.app/Contents/MacOS/QtBundle ausführbare Datei, OK.

Aber wenn ich es starte bekomme ich:

This application failed to start because it could not find or load the Qt platform plugin "cocoa".

Reinstalling the application may fix this problem.
Abort trap: 6 

Soweit ich weiß, ist dieser Fehler aufgetreten, weil das Anwendungspaket keine Qt-Dateien (Framework-Bibliotheken und -Plugins) enthält. Deshalb führe ich @ aumacdeployqt und es füllt Bundles-Verzeichnis mit vielen Dateien in Framework- und PlugIns-Ordnern und Anwendung ist Kann ausgeführt und auf ein anderes System verschoben werden.

Es löst teilweise das Problem, aberIch möchte das Bundle mit CMake und @ füll BundleUtilities und ohne macdeployqt tool.

Leider habe ich kein gutes und einfaches Beispiel für die Bereitstellung von Qt5 mit BundleUtilities gefunden.

Könnte mir jemand helfen, mein 'helloworld'-Beispiel so ändern, dass CMake automatisch ein einsatzbereites Bundle erstellt?

Danke im Voraus

Wichtigste Frage: Wie verwende ich CMake BundleUtilities, um eine verschiebbare Anwendung zu erhalten?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage