【问题标题】:CMake: How can I copy a directory into the ios application bundleCMake:如何将目录复制到 ios 应用程序包中
【发布时间】:2015-05-16 16:10:28
【问题描述】:

我有一个使用 CMake 3.1.1 构建的 ios 项目,但我遇到了最后一个问题 - 让 CMake 将资产目录复制到应用程序的正确位置。

我有这个,它在模拟器中运行应用程序时有效。但是,它不起作用,实际上在归档时会导致构建失败,因为它构建的目标目录不存在。

get_target_property(APPLICATION_BIN ${APPLICATION_NAME} 位置) get_dotapp_dir(${APPLICATION_BIN} APPLICATION_APP_LOCATION) add_custom_command(目标 ${PROJECT_NAME} POST_BUILD 命令 cp -r "${CMAKE_SOURCE_DIR}/assets" "${APPLICATION_APP_LOCATION}")

我要复制的目录有很多子目录,我需要将它们全部保留。本质上,我想用 cmake 完成与将“assets”文件夹拖到“Resources”下的 ios 项目时发生的相同的事情。

【问题讨论】:

    标签: ios xcode cmake


    【解决方案1】:

    使用 ${CMAKE_COMMAND} -E copy_directory 而不是调用 cp。

    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${LOCATION_FOR_THE_APP} DEPENDS "${PROJECT_SOURCE_DIR}/assets" COMMAND -E copy_directory ${PROJECT_SOURCE_DIR}/assets ${CMAKE_CURRENT_BINARY_DIR}/${LOCATION_FOR_THE_APP})
    add_custom_target(${CMAKE_CURRENT_BINARY_DIR}/${LOCATION_FOR_THE_APP} DEPENDS 
    

    【讨论】:

    • 谢谢!这让我走上了正轨。我认为 cmake copy_directory 是关键。
    【解决方案2】:

    我对此的解决方案类似于this answer。我的项目的目标是让 googletests 在跨平台库上运行,我必须将 googletests 包装到 XCTest Bundle 中。出于显而易见的原因,我们正在转换为 CMake 的构建工具。

    我最终将此作为预构建步骤:

    add_custom_command(TARGET ExampleTestTarget PRE_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory 
                  ${CMAKE_CURRENT_LIST_DIR}/resources $<TARGET_FILE_DIR:ExampleTestTarget>
    )
    

    基本上,在预构建时,CMake 会将资源文件夹中的所有内容复制到目标包的根目录中。出于某种原因(可能是 CMake 的事情),XCode 毫无问题地选择了这些资源文件,因此我不必将文件明确设置为 RESOURCE 文件。

    如果您使用 MacOS Bundles/Packages/etc.,则必须将这些文件复制粘贴到 $&lt;TARGET_FILE_DIR:ExampleTestTarget&gt;/Resources,因为这是 CMake 生成的 MacOS xcodeproj 的默认资源位置。 (让 XCTests 在 CMake 中工作存在很多漏洞,我建议每个做跨平台 gtests 的人为 MacOS 创建一个可执行文件,这样你无论如何都不会遇到这样的麻烦)。

    请注意,除非您将文件添加到 target_sources() 中,否则您不会在 XCode 中看到这些文件,但谁在乎……它仍然有效!谁专门在 iOS 中开发 C++? ....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2010-09-21
      • 2012-11-05
      • 2021-04-01
      相关资源
      最近更新 更多