在CMake中构建MACOSX_BUNDLE时,如何将链接的动态库复制到捆绑包中?

时间:2015-07-28 10:26:52

标签: macos cmake dylib

我们构建了一个在.app包中发布的OS X应用程序。构建管理使用CMake实现。此应用程序依赖于 CMake目标库(可能已导入)和 Findxxx.cmake 脚本填充的xxx_LIBRARIES变量中可用的库。 CMakeLists.txt的大纲可能是:

project(OSX_Bundle)

add_executable(${PROJECT_NAME} MACOSX_BUNDLE main.mm )

target_include_directories(${PROJECT_NAME}  PRIVATE
                           ${LibA_INCLUDE_DIRS} )

target_link_libraries(${PROJECT_NAME}
                      ${LibA_LIBRARIES}
                      LibB
                      "-framework Cocoa" )

现在,我们需要将 LibA.dylib LibB.dylib 复制到规范的 OSX_Bundle.app/Contents/Frameworks 中。应该在构建树中以及在安装树中为应用程序完成此副本。尽管它看起来像是一项基本任务,但我们无法在网上找到解决此问题的最佳方法。

1 个答案:

答案 0 :(得分:0)

很多人都面临这个问题。您可以尝试以下列表之一:

  • CMake post-buld command并在此处调用“macdeployqt”;但它可能会减慢构建速度(CMake生成器表达式也会为Xcode / VS提供正确的路径和二进制)
  • CMake custom command,再次使用macdeployqt,如果您不想一直触发它,那么可以根据需要手动触发
  • 如上面评论
  • 中所述,可能是安装阶段的捆绑依赖项
  • 可以使用CPack,它会给你新的'包'目标;在使用CMake / CPack后,它可以捆绑所需的一切(它使用上面提到的安装内容)并生成最终安装程序

我猜,最后一颗子弹应该符合你的需要。