CMake MSVC:如何为单个配置添加自定义命令? (调试)

CMake MSVC: How to add a custom command for a single configuration? (Debug)

我只想为调试配置添加以下命令:

if (MSVC)
    add_custom_command(TARGET my_target PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${src} ${dst}) 
endif()

srcdst 只是路径字符串。

我尝试使用我在相关答案中看到的示例来调整代码 , here and 。 但他们都没有工作。要么具体情况略有不同,要么他们只是对其他配置使用不同的参数执行相同的命令。 我所有的改编尝试都导致命令格式错误或根本无法解决问题。

我希望其他配置完全不需要添加命令。

如何完成这个简单的任务?

我设法使用虚拟空字符串进行调试以外的配置使其工作:

string(
APPEND copy_cmd
"$<IF:$<CONFIG:Debug>,"
"${CMAKE_COMMAND};-E;copy;${pdb_src};${pdb_dst},"
""
">"
)
add_custom_command(TARGET ${target_name} PRE_BUILD COMMAND "${copy_cmd}" COMMAND_EXPAND_LISTS)

请注意,“”字符串基本上是 if 的 'else'。它使命令无效。

我喜欢使用true

使命令无效
add_custom_command(TARGET ${target_name} PRE_BUILD
  COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:Debug>,copy,true> ${src} ${dst}
  COMMAND_EXPAND_LISTS)

如果 notDebug 你应该有 cmake -E true ...true 将把命令变成没有操作。

true Do nothing, with an exit code of 0.

来源:https://cmake.org/cmake/help/latest/manual/cmake.1.html#run-a-command-line-tool

注意:自 3.16
起可用 来源:https://cmake.org/cmake/help/latest/release/3.16.html#command-line