如何通过 CMake 在 Info.plist 中设置 NSHighResolutionCapable?
How can I set NSHighResolutionCapable in Info.plist via CMake?
我目前正在使用 CMake 构建一个 Mac 应用程序。我可以使用这样的命令设置许多 Info.plist 个文件:
SET(MACOSX_BUNDLE_LONG_VERSION_STRING ${MYAPP_VERSION})
我想在我的 Info.plist 文件中设置 NSHighResolutionCapable
。不幸的是,没有像 MACOSX_BUNDLE_HIGH_RESOLUTION_CAPABLE
这样的 属性。如何使用 CMake 以编程方式设置此 Info.plist 值?
你不能。您只能从 CMake 编辑几组 Info.plist 属性。 Show here。但是您可以提供自己的 Info.plist 模板,以便在 CMake 中的 OSX 捆绑包中使用。这是我使用的代码:
function(osxBundle bundleName subDirList dependList)
processTarget("${bundleName}" APPLE_BUNDLE "${subDirList}" "${dependList}")
# Info.plist configure
# Proyect provides its own Info.plist?
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
set_target_properties(${bundleName} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
# Use default template
else()
set_target_properties(${bundleName} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SCRIPTS_PATH}/Info.plist)
endif()
# Overwrite some properties (not used yet)
# MACOSX_BUNDLE_BUNDLE_NAME
# MACOSX_BUNDLE_BUNDLE_VERSION
# MACOSX_BUNDLE_COPYRIGHT
# MACOSX_BUNDLE_GUI_IDENTIFIER
# set_target_properties(${bundleName} PROPERTIES MACOSX_BUNDLE_ICON_FILE logo.icns)
# MACOSX_BUNDLE_INFO_STRING
# MACOSX_BUNDLE_LONG_VERSION_STRING
# MACOSX_BUNDLE_SHORT_VERSION_STRING
target_link_libraries(${bundleName} ${COCOA_LIB})
endfunction()
另一个解决方案是运行一个post构建命令来修改plist:
add_custom_command(
TARGET foobar
POST_BUILD
COMMAND plutil -replace NSHighResolutionCapable -bool true foobar.app/Contents/Info.plist
)
我目前正在使用 CMake 构建一个 Mac 应用程序。我可以使用这样的命令设置许多 Info.plist 个文件:
SET(MACOSX_BUNDLE_LONG_VERSION_STRING ${MYAPP_VERSION})
我想在我的 Info.plist 文件中设置 NSHighResolutionCapable
。不幸的是,没有像 MACOSX_BUNDLE_HIGH_RESOLUTION_CAPABLE
这样的 属性。如何使用 CMake 以编程方式设置此 Info.plist 值?
你不能。您只能从 CMake 编辑几组 Info.plist 属性。 Show here。但是您可以提供自己的 Info.plist 模板,以便在 CMake 中的 OSX 捆绑包中使用。这是我使用的代码:
function(osxBundle bundleName subDirList dependList) processTarget("${bundleName}" APPLE_BUNDLE "${subDirList}" "${dependList}") # Info.plist configure # Proyect provides its own Info.plist? if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) set_target_properties(${bundleName} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) # Use default template else() set_target_properties(${bundleName} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SCRIPTS_PATH}/Info.plist) endif() # Overwrite some properties (not used yet) # MACOSX_BUNDLE_BUNDLE_NAME # MACOSX_BUNDLE_BUNDLE_VERSION # MACOSX_BUNDLE_COPYRIGHT # MACOSX_BUNDLE_GUI_IDENTIFIER # set_target_properties(${bundleName} PROPERTIES MACOSX_BUNDLE_ICON_FILE logo.icns) # MACOSX_BUNDLE_INFO_STRING # MACOSX_BUNDLE_LONG_VERSION_STRING # MACOSX_BUNDLE_SHORT_VERSION_STRING target_link_libraries(${bundleName} ${COCOA_LIB}) endfunction()
另一个解决方案是运行一个post构建命令来修改plist:
add_custom_command(
TARGET foobar
POST_BUILD
COMMAND plutil -replace NSHighResolutionCapable -bool true foobar.app/Contents/Info.plist
)