如何使用cmake创建MacOS应用捆绑包

时间:2018-11-30 15:21:55

标签: macos cmake bundle

这可以视为对CMake MacOS X bundle with BundleUtiliies for Qt application的后续行动

我想在CI上创建一个MACOS捆绑软件,用户可以将其用于开源项目。

我所拥有的:

  • 主要可执行文件
  • 更新程序可执行文件
  • 图标文件
  • 帮助脚本先调用updater然后调用main
  • 文件夹中的数据文件(翻译等,有些在构建时生成)
  • 插件共享库

到目前为止我所做的:

  • MACOSX_BUNDLE添加到可执行文件
  • 在其来源和RESOURCE属性中添加图标
  • 设置MACOSX_BUNDLE_*属性
  • 以跨平台方式安装所有内容(常规的install(TARGETS调用和install(FILES用于资源)

但是现在我仍然停留在如何将这些东西打包而无需进行大量手动工作的情况下。

从链接的问题中我得到了这样的东西:

set(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app")
set(LIBS )
set(DIRS "${CMAKE_BINARY_DIR}")
# Path used for searching by FIND_XXX(), with appropriate suffixes added
if(CMAKE_PREFIX_PATH)
        foreach(dir ${CMAKE_PREFIX_PATH})
                list(APPEND DIRS "${dir}/bin" "${dir}/lib")
        endforeach()
endif()
install(CODE "include(BundleUtilities)
  fixup_bundle(\"${APPS}\" \"${LIBS}\" \"${DIRS}\")")

但是:

  • 为什么我需要手动传递*.app路径? CMake已经知道了,不是吗?
  • LIBS应该包含我的插件,不是吗?但是呢路径?目标名称?
  • DIRS对我来说也是一个谜。即使在CMake 3.12中也没有文档(尽管我仍在使用2.8.12 :()
  • 如何添加我生成的常规数据文件?可能与图标相同或相似?但是生成的那些呢?

帮助,示例指针,执行此操作的完整CMakeList等。

注意:我是在CI上从Linux进行交叉编译的,而不是使用Qt,例如毫无疑问macdeployqt

1 个答案:

答案 0 :(得分:5)

刚遇到同样的问题,谷歌把我带到了这里。

这对我有用:

set(CUR_TARGET myappname)
add_executable(${CUR_TARGET} MACOSX_BUNDLE ${MY_SRC})            
set_target_properties(${CUR_TARGET} PROPERTIES
    BUNDLE True
    MACOSX_BUNDLE_GUI_IDENTIFIER my.domain.style.identifier.${CUR_TARGET}
    MACOSX_BUNDLE_BUNDLE_NAME ${CUR_TARGET}
    MACOSX_BUNDLE_BUNDLE_VERSION "0.1"
    MACOSX_BUNDLE_SHORT_VERSION_STRING "0.1"
    MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/customtemplate.plist.in
)

customtemplate.plist.in 文件基于位于 your_cmake_install_dir/share/cmake/Modules/MacOSXBundleInfo.plist.in 的 cmake dir 子文件夹中的 cmake 模板