gpt4 book ai didi

macos - 使用 CMake 自定义 MacOS Bundle 的 Info.plist 文件

转载 作者:行者123 更新时间:2023-12-04 23:39:31 25 4
gpt4 key购买 nike

我正在使用 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 捆绑包?

最佳答案

如果您查看 MACOSX_BUNDLE_INFO_PLIST 的文档,您会看到它只支持设置有限数量的影响 Info.plist 模板的属性( MACOSX_BUNDLE_BUNDLE_NAME 等)。这些都不适用于 NSMainNibFileNSPrincipalClass键。但是,在该文档中,它暗示了模板的功能:

its Info.plist file is created by configuring a template



实际发生的是,模块正在调用 configure_file 在 .plist.in 文件上。这就是为什么在全局范围内设置变量有效,但在属性级别设置变量无效。

因此,答案是您必须将它们设置为变量,而不是目标属性。如果您担心这些范围,可以 unset 使用后立即使用的变量,并且应该注意,只有变量对其父作用域不可见,除非它们专门设置为这样。

关于macos - 使用 CMake 自定义 MacOS Bundle 的 Info.plist 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42313808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com