2017-02-18 42 views
2

我使用CMake的生成構建文件的跨平臺遊戲,並希望在某一批量的Info.plist文件定製的MacOS捆綁與CMake的

這裏指定自定義NSMainNibFileNSPrincipalClass值Info.plist文件的相關部分我Info.plist.in模板:

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

我在做什麼,我的CMakeLists.txt是:

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)` 

如果我得到了MAIN_NIBFILE屬性爲目標,它會按預期返回MainMenu,但實際生成的Info.plist爲空。

但是...

如果我全局設置這些變量,它工作正常。

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

我失去了一些東西在這裏還是這是CMake的的限制或如何處理的MacOS捆綁?

回答

3

如果您查看MACOSX_BUNDLE_INFO_PLIST的文檔,您會看到它只支持設置影響Info.plist模板(MACOSX_BUNDLE_BUNDLE_NAME等)的有限數量的屬性。這些都不是NSMainNibFileNSPrincipalClass密鑰。然而,該文檔中它在模板的功能給出了一個暗示:

其Info.plist文件通過配置模板

什麼是實際發生的創建,是該模塊調用.plist.in文件中的configure_file。這就是爲什麼在全局範圍設置變量的原因,但是在屬性級設置變量不會。

所以,答案是你必須將它們設置爲變量,而不是目標屬性。如果您擔心這些變量的範圍,您可以在使用後立即使用這些變量,並且應該注意,變量只對它們的父範圍是不可見的,除非它們是專門設置的。

+0

這可以說明一些原因。我不敢相信我沒有拿起關於配置模板的一點(使用configure_file)。 無論如何我可以解決它,我只需要在plist中爲某些工具指定XIB文件和NSApplication子類。 –