使用XCode目标进行CMake,为Release config生成忽略的调试符号设置

时间:2018-04-06 14:37:28

标签: xcode cmake debug-symbols

我正在尝试为我的Release配置生成dSYM文件。在我的CMake配置中,我有:

if (CMAKE_GENERATOR STREQUAL "Xcode")
  # generate debug symbols in a .dsym file for release mode
  set(CMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] 
      "YES")
  set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] 
      "dwarf-with-dsym")
  # strip symbols from final executable
  set(CMAKE_XCODE_ATTRIBUTE_DEPLOYMENT_POSTPROCESSING[variant=Release] 
      "YES")
endif()

调试信息格式和部署后处理都针对Release配置进行了选择。但是,Generate Debug Symbols文件中的XCode接口/ GCC_GENERATE_DEBUGGING_SYMBOLS中的xxx.xcodeproj/project.pbxproj设置为NO,用于发布配置。

Generate debug symbols off in Release

删除[variant=Release]限制对Release配置没有影响。如果我手动打开Release中的设置,我会得到所需的结果。如何在发布配置中使用此设置来让CMake创建Xcode项目?

我不想使用RelWithDebInfo,因为它的优化设置较低(-O2而不是-O3)。我希望.dSYM文件用于调试来自该字段的崩溃。

2 个答案:

答案 0 :(得分:1)

您不得不求助于修改CMAKE_CXX_FLAGS,但我建议将target_compile_options与生成器表达式一起使用:

target_compile_options(your_exe PRIVATE
    $<$<CXX_COMPILER_ID:Clang>:-g>
    )

答案 1 :(得分:0)

使用运行 add_custom_commandxcrun dsymutil $<TARGET_FILE:your_target> -o $<TARGET_DIR:your_target>/blah.dSYM 后构建脚本。

这有一个缺点,即使代码中没有任何更改,该脚本也将始终运行。使用它作为 Xcode 构建过程的一个步骤可以消除冗余运行。好处是所有生成器都可以使用它。