2017-02-18 23 views
2

Я использую CMake генерацию файлов сборки для кросса игровой платформы и хочет задать пользовательские NSMainNibFile и NSPrincipalClass значение в файле Info.plist определенного расслоения вCUSTOMIZING MacOS расслоения с CMake

Вот соответствующая часть мой 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 и т. Д.). Ни один из них не предназначен для ключей NSMainNibFile или NSPrincipalClass. Однако в этой документации это дает намек на функциональность шаблона:

его Info.plist файл создается путем настройки шаблона

Что на самом деле происходит, является то, что модуль вызова configure_file в файле .plist.in. Вот почему установка переменных в глобальном масштабе работает, но установка их на уровне свойств не делает.

Итак, ответ заключается в том, что вы должны установить их как переменные, а не как целевые свойства. Если вас беспокоит их объем, вы можете сразу же использовать переменные сразу после использования, и следует отметить, что переменные только не видны в их родительских областях, если они специально не установлены как таковые.

+0

Это проливает на него некоторый свет. Не могу поверить, что я не понял, как настроить шаблон (используя configure_file) под капотом. Я могу обойти это так или иначе, мне нужно только указать XIB-файлы и подклассы NSApplication в plist для некоторых инструментов. –