【发布时间】:2019-02-20 02:00:19
【问题描述】:
我有一个跨平台(Windows、Mac、iOS)CMake 项目,需要将二进制资源(图像、音频、文本文件等)复制到最终应用程序。我之前只是将所有资源都添加到 add_executable 命令中,并且在我想将所有内容组织到子目录之前效果很好。
为了在保留文件夹结构的同时复制应用程序资产,我最终在 windows 目标中使用了以下自定义命令:
add_custom_command(
TARGET ${APP_TARGET_NAME} PRE_LINK
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_SOURCE_DIR}/${APP_ASSETS_DIR}
$<TARGET_FILE_DIR:${APP_TARGET_NAME}>/assets
)
效果很好。当我尝试在 macOS 上做同样的事情时,问题就来了。当我在 macOS 上使用相同的 $<TARGET_FILE_DIR> 技巧时,我得到了输出应用程序包的地址(这非常好),所以我在末尾添加了一个 /resources 并尝试在那里复制,但这失败了。
在 XCode 中我收到以下错误:
PhaseScriptExecution CMake\ PreLink\ Rules /Users/someuser/Documents/Build/Test/Test.build/Debug/Test_MAC.build/Script-2CF8724D08BC49E4A13B9E75.sh
cd /Users/someuser/Documents/GitHub/Test
/bin/sh -c /Users/someuser/Documents/Build/Test/Test.build/Debug/Test_MAC.build/Script-2CF8724D08BC49E4A13B9E75.sh
/Users/someuser/Documents/Build/Test/Debug/Test_MAC.app/Contents/MacOS/Test_MAC -E copy_directory /Users/someuser/Documents/GitHub/Test/assets /Users/someuser/Documents/Build/Test/Debug/Test_MAC.app/Contents/Resources
make: *** [Test_MAC_buildpart_0] Segmentation fault: 11
Command /bin/sh failed with exit code 2
这不是特别有用。我试过PRE_LINK 和POST_BUILD 以及copy_directory 和copy。
为什么会失败?我无法在 iOS 上进行测试,但我想这两者会以类似的方式工作。
如何将我的资产复制到 macOS(也包括 iOS)上的捆绑包中?
【问题讨论】:
-
该命令不应出现段错误,因此这可能意味着您正在使用的 CMake 版本中存在错误。你运行的是什么版本?使用
cmake --version查看此信息。 -
在使用 CPack 构建 dmg 文件时,我经常遇到
Segmentation fault: 11消息。原来我忘记添加一些资源,底层工具崩溃了。 -
@JohnSzakmeister 终端版本3.13.2,桌面应用3.13.4
-
我尝试将终端升级到 3.13.4,但遇到了同样的问题