Nei*_*l M 4 macos cmake nsbundle
我正在使用CMake为跨平台游戏生成构建文件,并希望在某些bundle的Info.plist文件中指定自定义NSMainNibFile和NSPrincipalClass值
这是我的Info.plist.in模板的相关部分:
<key>NSMainNibFile</key>
<string>${MAIN_NIBFILE}</string>
<key>NSPrincipalClass</key>
<string>${PRINCIPAL_CLASS}</string>
Run Code Online (Sandbox Code Playgroud)
我在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)`
Run Code Online (Sandbox Code Playgroud)
如果我获取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")
Run Code Online (Sandbox Code Playgroud)
我在这里遗漏了什么,或者这是CMake的限制或它如何处理macOS包?
如果查看MACOSX_BUNDLE_INFO_PLIST的文档,您将看到它仅支持设置影响Info.plist模板(MACOSX_BUNDLE_BUNDLE_NAME等)的有限数量的属性.这些都不是NSMainNibFile或NSPrincipalClass键.但是,在该文档中,它提供了模板功能的提示:
它的Info.plist文件是通过配置模板创建的
实际发生的是,模块正在调用configure_file.plist.in文件.这就是为什么在全局范围设置变量的原因,但在属性级别设置变量不起作用.
所以,答案是你必须将它们设置为变量,而不是目标属性.如果您担心这些unset变量的范围,您可以在使用后立即使用变量,并且应该注意变量仅对其父作用域不可见,除非它们是专门设置的.
| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |