2017-02-18 3 views
2

Ich bin mit CMake-Dateien für ein Cross-Plattform-Spiel erzeugen bauen und benutzerdefinierte NSMainNibFile und NSPrincipalClass Werte in bestimmten Bundles Info.plist DateiCustomizing MacOS Bundle des Info.plist Datei mit CMake

Hier ist der relevante Teil angeben mag von meine Info.plist.in Vorlage:

<key>NSMainNibFile</key> 
<string>${MAIN_NIBFILE}</string> 
<key>NSPrincipalClass</key> 
<string>${PRINCIPAL_CLASS}</string> 

Was ich in meinem CMakeLists.txt tun ist:

set_target_properties(GLWindow PROPERTIES 
    MACOSX_BUNDLE_BUNDLE_NAME "OpenGL Test" 
    MAIN_NIBFILE "MainMenu" 
    PRINCIPAL_CLASS "NSApplication") 
    MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/CMake/Info.plist.in)` 

Wenn ich die 012 bekommenEigenschaft für das Ziel, gibt MainMenu wie erwartet zurück, aber die tatsächlich generierte Info.plist ist leer.

ABER ...

Wenn ich diese Variablen global festgelegt, es funktioniert gut.

# I would prefer to set these at target scope, 
# but it doesn't bloody work! 
set(MAIN_NIBFILE "MainMenu") 
set(PRINCIPAL_CLASS "NSApplication") 

Am ich hier etwas fehlt oder ist dies eine Einschränkung von CMake oder wie Griffe es macOS Bündel?

Antwort

3

Wenn Sie sich die Dokumentation für MACOSX_BUNDLE_INFO_PLIST ansehen, werden Sie sehen, dass sie nur die Einstellung einer begrenzten Anzahl von Eigenschaften unterstützt, die die Info.plist-Vorlage (MACOSX_BUNDLE_BUNDLE_NAME usw.) betreffen. Keine davon sind für die NSMainNibFile oder Schlüssel. Doch in dieser Dokumentation es einen Hinweis auf die Funktionalität der Vorlage gibt:

ist

seine Info.plist-Datei durch die Konfiguration einer Vorlage

Was geschieht eigentlich geschaffen ist, dass das Modul ruft configure_file für die Datei .plist.in. Dies ist der Grund, warum Variablen im globalen Bereich festgelegt werden, dies jedoch nicht auf Eigenschaftenebene festgelegt wird.

Also die Antwort ist, dass Sie diese als Variablen festlegen müssen, nicht als Zieleigenschaften. Wenn Sie sich Sorgen über den Umfang von diesen machen, können Sie die Variablen sofort nach der Verwendung unset, und es sollte beachtet werden, dass Variablen nur für ihre übergeordneten Bereiche sichtbar sind, es sei denn, sie sind speziell als solche festgelegt.

+0

Das wirft Licht darauf. Ich kann nicht glauben, dass ich nicht das bisschen über das Konfigurieren der Vorlage (unter Verwendung von configure_file) unter der Haube aufgeschnappt habe. Ich kann sowieso umgehen, ich brauche nur XIB-Dateien und NSApplication-Unterklassen in einem Plist für einige Tools angeben. –

Verwandte Themen