You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake add_custom_command POST_BUILD异常:iOS Framework的dSYM复制不完整

问题

在iOS Framework构建项目中,通过GCC_GENERATE_DEBUGGING_SYMBOLS配置生成dSYM文件,dSYM本身能正常生成,但使用CMake的add_custom_command执行复制操作时,仅复制了dSYM的目录结构,内部的dwarf文件为空或未被复制。推测原因是Framework构建完成触发POST_BUILD命令时,dSYM文件还未完全生成完毕,需要让自定义命令等待dSYM生成完成后再执行。

相关代码如下:

add_library(${TARGET_OBJC_LIB_NAME} SHARED
    ${DIR_SRCS}
    ${sources}
    ${headers}
    ${objc_sources}
)

add_custom_command(TARGET ${TARGET_OBJC_LIB_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory $<TARGET_FILE_DIR:${TARGET_OBJC_LIB_NAME}>/.. destinationDirectory
)
解决方案
  • 让自定义命令依赖dSYM目标:CMake在iOS/macOS环境下构建共享库时,会自动生成对应的dSYM目标,命名为${TARGET_OBJC_LIB_NAME}.dsym。在add_custom_command中添加DEPENDS参数指定该dSYM目标,就能确保dSYM完全生成后才执行复制操作:
add_custom_command(TARGET ${TARGET_OBJC_LIB_NAME}
    POST_BUILD
    DEPENDS ${TARGET_OBJC_LIB_NAME}.dsym
    COMMAND ${CMAKE_COMMAND} -E copy_directory $<TARGET_FILE_DIR:${TARGET_OBJC_LIB_NAME}>/.. destinationDirectory
)
  • 单独针对dSYM目标配置复制:如果只需复制dSYM文件,可以直接为dSYM目标添加POST_BUILD命令,这样命令会在dSYM生成完成后立即执行:
add_custom_command(TARGET ${TARGET_OBJC_LIB_NAME}.dsym
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory $<TARGET_FILE_DIR:${TARGET_OBJC_LIB_NAME}.dsym> destinationDirectory/${TARGET_OBJC_LIB_NAME}.dsym
)
  • 显式指定构建依赖顺序:若上述方法仍无效,可通过add_dependencies强制主目标依赖dSYM目标,确保dSYM先于主目标的POST_BUILD命令完成构建:
add_dependencies(${TARGET_OBJC_LIB_NAME} ${TARGET_OBJC_LIB_NAME}.dsym)

内容的提问来源于stack exchange,提问作者rstr1112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:50:41