【问题标题】:How I can copy a assets folder into the Resources folder of a macos bundle app using cmake?如何使用 cmake 将资产文件夹复制到 macOS 捆绑应用程序的资源文件夹中?
【发布时间】:2021-07-08 21:17:34
【问题描述】:

我正在构建一个 macOS 捆绑应用程序,我需要将我的资产文件夹包含在资源文件夹中。

现在我设法复制了这个文件夹中的独立文件,但我松散了文件夹的结构:

set(ASSETS ${CMAKE_SOURCE_DIR}/assets/textures/awesomeface.png)
target_sources(${PROJECT_NAME} PRIVATE ${ASSETS})

set_target_properties(${PROJECT_NAME} PROPERTIES
  MACOSX_BUNDLE ON
  MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}
  MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION}
  RESOURCE "${ASSETS}"
)

我可以使用 GLOB_RECURSE 来查找资产文件夹中的所有文件并将它们移动到资源中,但如果这样做,我将失去文件夹结构。

这样做的正确方法是什么?

【问题讨论】:

    标签: macos cmake


    【解决方案1】:

    使用MACOSX_PACKAGE_LOCATION源文件属性:

    set(textures assets/textures/awesomeface.png ...)
    target_sources(target PRIVATE ${textures})
    set_source_files_properties(
      ${textures}
      PROPERTIES
        MACOSX_PACKAGE_LOCATION Resources/assets/textures
    )
    

    上面的东西应该可以工作(虽然我没有方便的mac来测试它)。

    在此处查看文档:https://cmake.org/cmake/help/latest/prop_sf/MACOSX_PACKAGE_LOCATION.html

    【讨论】:

    • 我只想复制一个有很多文件的文件夹,这样我就不得不手动遍历每个文件夹和子文件夹
    • @ellipticaldoor - 我只是这里的信使。源文件属性是您在 CMake 中执行此操作的方式。您可以使用 CMake 的路径操作函数和循环来减少这种情况。
    • 我看没有办法,最后我只是用自定义命令复制文件夹
    【解决方案2】:

    只需简单地复制文件夹即可使用自定义命令

    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${CMAKE_SOURCE_DIR}/assets"
        "$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/assets"
    )
    

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 2019-07-02
      • 2020-01-31
      • 2012-01-14
      • 2016-07-14
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多