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

Ad *_*d N 12 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" )
Run Code Online (Sandbox Code Playgroud)

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

小智 -2

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

  • CMake post-buld 命令并在此处调用“macdeployqt”;但它可能会减慢构建速度(CMake 生成器表达式也会为您提供 Xcode/VS 的正确路径和二进制文件)
  • CMake 自定义命令,再次使用 macdeployqt,如果您不想总是触发它,那么可以在需要时手动触发它
  • 正如上面评论中提到的,安装阶段可能存在捆绑依赖关系
  • 可以使用 CPack,它会给你新的“package”目标;使用 CMake/CPack 后,它可能会捆绑所需的所有内容(它使用上面提到的安装内容)并生成最终安装程序

我想,最后一个项目应该符合您的需求。