Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用cmake创建MacOS应用程序包_Macos_Cmake_Bundle - Fatal编程技术网

如何使用cmake创建MacOS应用程序包

如何使用cmake创建MacOS应用程序包,macos,cmake,bundle,Macos,Cmake,Bundle,这可以被视为是一项后续行动 我想在CI上创建一个MACOS捆绑包,供用户用于开源项目 我所拥有的: 主可执行文件 更新程序可执行文件 图标文件 然后调用更新程序main的助手脚本 文件夹中的数据文件(翻译等,一些在构建时生成) 插件共享库 到目前为止我所做的: 向可执行文件添加MACOSX\u BUNDLE 将图标添加到其源和资源属性 设置MACOSX\u BUNDLE.*properties 以跨平台的方式安装所有内容(常规install(目标是调用和install(资源的文件) 但现

这可以被视为是一项后续行动

我想在CI上创建一个MACOS捆绑包,供用户用于开源项目

我所拥有的:

  • 主可执行文件
  • 更新程序可执行文件
  • 图标文件
  • 然后调用更新程序main的助手脚本
  • 文件夹中的数据文件(翻译等,一些在构建时生成)
  • 插件共享库
到目前为止我所做的:

  • 向可执行文件添加
    MACOSX\u BUNDLE
  • 将图标添加到其源和
    资源
    属性
  • 设置
    MACOSX\u BUNDLE.*
    properties
  • 以跨平台的方式安装所有内容(常规
    install(目标是
    调用和
    install(资源的文件
但现在我被困在如何将它们放入捆绑包中,而不需要进行大量的手工工作

从链接的问题中,我得到了如下结果:

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:()
  • 如何添加我生成的和常规的数据文件?可能与图标相同或相似?但是生成的数据文件呢
帮助、示例指针、完整的CMakeLists等等。非常欢迎


注意:我是在CI上从linux交叉编译的,没有使用Qt,因此,例如,
macdeployqt
等等是不可能的。

只是在同一个问题上遇到了问题,google把我带到了这里

这对我很有用:

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基于您的_cmake_install_dir/share/cmake/Modules/MacOSXBundleInfo.plist.in中cmake dir子文件夹中的cmake模板。您有没有发现这一点?如果您能发布一个解决方案,这将非常有用。这是我的CMakeList,它是一个构建到应用程序包中的macOS程序。