CMake:如何将目录复制到ios应用程序包中

时间:2015-03-14 02:22:57

标签: ios xcode cmake

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

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

get_target_property(APPLICATION_BIN $ {APPLICATION_NAME} LOCATION) get_dotapp_dir($ {APPLICATION_BIN} APPLICATION_APP_LOCATION) add_custom_command(TARGET $ {PROJECT_NAME}      POST_BUILD      COMMAND cp -r" $ {CMAKE_SOURCE_DIR} / assets" " $ {APPLICATION_APP_LOCATION}&#34)

我正在复制的目录有很多子目录,我需要它们全部保存。基本上我想用cmake完成同样的事情,当我拖动"资产"将文件夹放入"资源"。

下面的ios项目中

2 个答案:

答案 0 :(得分:2)

使用$ {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

答案 1 :(得分:0)

我对此的解决方案类似于this answer。我项目的目标是让googletests在跨平台的库中运行,在该库中,我必须将googletests包装到XCTest捆绑包中。出于明显的原因,我们要转换为的构建工具是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。,则必须将这些文件复制粘贴到$<TARGET_FILE_DIR:ExampleTestTarget>/Resources中,因为这是CMake生成的MacOS xcodeproj的默认资源位置。 (让XCTests在CMake中工作有很多漏洞,我建议每个进行跨平台gtest的人都为MacOS创建可执行文件,因此无论如何您都不会遇到这样的麻烦。)

请注意,除非您在target_sources()中添加文件,否则您将看不到XCode中的文件,但是谁在乎...它仍然可以工作!谁专门在iOS中开发C ++? ....