【问题标题】:CMake: how do you copy private frameworks into the application bundle under OS X?CMake:如何将私有框架复制到 OS X 下的应用程序包中?
【发布时间】:2010-12-24 15:19:43
【问题描述】:

我们构建了几个私有框架,这些框架在 Xcode 构建过程中被复制到我们的应用程序包中。我正在将整个构建过程转移到 CMake,这是我无法解决的一个领域。

我找到了一个实用程序模块:CMakeIngestOSXBundleLibraries.cmake,但我有点不清楚如何使用它,或者它是否符合我们的要求。我希望每次在链接后构建应用程序时运行它。这让我相信我应该做类似的事情

IF (APPLE)
 add_custom_command( TargetName  POST_BUILD CMakeIngestOSXBundleLibraries.cmake )
ENDIF (APPLE) 

但我认为这不太对。有人有这方面的经验吗?

【问题讨论】:

    标签: macos frameworks cmake


    【解决方案1】:

    这就是我正在做的事情:

    1) 在我的框架 CMakeLists.txt 文件中,我有以下内容:

    IF (APPLE)
           SET_TARGET_PROPERTIES( MyFramework PROPERTIES FRAMEWORK true)
           SET_TARGET_PROPERTIES( MyFramework PROPERTIES
               XCODE_ATTRIBUTE_INSTALL_PATH @executable_path/../Frameworks/  )
    ENDIF (APPLE)
    

    第二个“set_target_properties”行将框架配置为 始终在框架的应用程序包中查找 子文件夹。

    2) 在我的顶级 CMakeLists.txt 文件中,我添加了 setup 一个统一的二进制文件 输出目录:

    SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin)
    SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin )
    SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin )
    

    3) 然后,在我的应用程序的 CMakeLists.txt 文件中,我有以下内容:

    IF (APPLE)
           ADD_CUSTOM_COMMAND(
                   TARGET MyApp
                   POST_BUILD
                   COMMAND ${PYTHON_EXECUTABLE}
                   ARGS ${CMAKE_HOME_DIRECTORY}/CopyFramework.py
                   --binary ${PROJECT_BINARY_DIR}/Bin
                   --framework MyFramework.framework
                   --app MyApp.app
    
        )
    ENDIF (APPLE)
    

    这调用了我的 python 脚本,它完成了组装工作 src 和 dest 路径,并实际复制框架。

    最后的诀窍是,由于这只是一个 Mac 的东西,我可以依靠 Python 脚本中的 Xcode 环境变量:

               config= os.environ["CONFIGURATION"]
    

    这允许我组装到实际二进制文件的完整路径 框架和应用的位置。

    我希望有一个 CMake 变量可以 在上下文中展开到当前配置 ADD_CUSTOM_COMMAND... 不必求助于使用 Xcode 环境变量。

    【讨论】:

    • CMake 现在允许在 ADD_CUSTOM_COMMAND 中的 COMMAND 字段的参数中使用生成器表达式。所以你可以做类似add_custom_command(TARGET myApp POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/myFramework/$<CONFIG>/myFramework.framework ${CMAKE_INSTALL_PREFIX}/myApp.app/Contents/Frameworks )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2016-01-24
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多