【问题标题】:CMAKE create OSX bundle for dylib?CMAKE 为 dylib 创建 OSX 包?
【发布时间】:2014-10-07 15:10:11
【问题描述】:

我需要一些与我不同实际上了解 CMAKE 的人的帮助。

问题: 我有这个 CMAKE 项目,它产生一个 .so/.dylib/.dll (它是另一个应用程序的插件),到目前为止一切都很好,它正在编译和链接并产生预期的输出。它被设置为像这样的 MODULE:

ADD_LIBRARY(${PROJECT_NAME} MODULE ${CORE_SRC} ${CORE_HEADERS})

具有大量外部依赖项和一些编译器/链接器设置。

并使用两个自定义目标进行构建:

ADD_CUSTOM_TARGET(debug
        COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR}
        COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
        COMMENT "Switch CMAKE_BUILD_TYPE to Debug")

ADD_CUSTOM_TARGET(release
        COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR}
        COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
        COMMENT "Switch CMAKE_BUILD_TYPE to Release")

我的问题是,在 osx 上,这个 dylib 必须打包为 osx BUNDLE,否则无法加载。我可以手动创建捆绑目录结构,但我的 CMAKE 知识并不全面,我相信我应该能够为我生成它。我确实尝试过一些示例,但我只能让它适用于可执行文件。

我想要将我的 dylib 安装到一个包中,并将其资源放在我的源目录外。在其他平台上,资源只是放在 dylib 旁边的文件夹中。然后将捆绑包或 dll 和文件夹安装到它们的目的地。

那么如何打包一个模块呢?有可能还是我在浪费时间?

【问题讨论】:

    标签: c++ macos cmake


    【解决方案1】:

    这一切都可以通过 cmake 实现;我记得我也很难弄清楚这一切。

    我有一个相当复杂的项目,它使用一个 dylib、一个框架和一系列插件(恰好也是 .sos)来做这件事。 Here 是它的 CMakeLists.txt 文件之一,涵盖了您需要的大部分内容(第 38 行左右)。

    如果您希望 cmake 为您创建捆绑包,您需要在添加可执行文件时传递 MACOSX_BUNDLE (ADD_EXECUTABLE)。请注意,这是针对应用程序本身的,不是针对 dylib 的。

    如果您可以将 dylib 构建为框架(FRAMEWORK 属性),cmake 应该在您添加它时自动将其放入 bundle 的 frameworks 目录。如果您使用 BUNDLE 属性构建插件,则同上。

    您也可以将manually assign MACOSX_PACKAGE_LOCATION 属性设置为您喜欢的任何内容

    我相信您可能还需要对目标执行SET(CMAKE_INSTALL_RPATH @loader_path/../Frameworks) 之类的操作。

    如果您有任何问题,请告诉我,我会更新我的答案。

    【讨论】:

      猜你喜欢
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多