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

CMake生成器表达式含空格字符串:Debug模式Robocopy命令执行失败求助

解决CMake仅Debug构建时执行Robocopy命令的问题

正确解决方案1:拆分命令与参数,用生成器表达式逐个控制(兼容所有支持生成器表达式的CMake版本)

将Robocopy的命令和每个参数分别用$<CONFIG:Debug>生成器表达式包裹,确保仅Debug模式下才会展开对应的命令和参数:

add_custom_command(TARGET Game POST_BUILD
    COMMAND $<$<CONFIG:Debug>:robocopy> 
            $<$<CONFIG:Debug>:/E> 
            $<$<CONFIG:Debug>:/MT:16> 
            $<$<CONFIG:Debug>:/NS> 
            $<$<CONFIG:Debug>:/NC> 
            $<$<CONFIG:Debug>:/NP> 
            $<$<CONFIG:Debug>:/NFL> 
            $<$<CONFIG:Debug>:/NDL> 
            $<$<CONFIG:Debug>:/R:3> 
            $<$<CONFIG:Debug>:/W:0> 
            $<$<CONFIG:Debug>:../Resources> 
            $<$<CONFIG:Debug>:$<CONFIG>/Resources>
)

这里用$<CONFIG>动态获取当前构建配置目录,避免硬写Debug,同时保证非Debug模式下没有任何有效命令执行。

正确解决方案2:使用$<IF>生成器表达式(CMake 3.19+)

如果你的CMake版本≥3.19,可以用更简洁的$<IF>表达式,直接分支控制命令:

add_custom_command(TARGET Game POST_BUILD
    COMMAND $<IF:$<CONFIG:Debug>,robocopy,echo> 
            $<$<CONFIG:Debug>:/E> $<$<CONFIG:Debug>:/MT:16> $<$<CONFIG:Debug>:/NS> $<$<CONFIG:Debug>:/NC> 
            $<$<CONFIG:Debug>:/NP> $<$<CONFIG:Debug>:/NFL> $<$<CONFIG:Debug>:/NDL> $<$<CONFIG:Debug>:/R:3> 
            $<$<CONFIG:Debug>:/W:0> $<$<CONFIG:Debug>:../Resources> $<$<CONFIG:Debug>:$<CONFIG>/Resources>
)

非Debug模式下执行echo命令(Windows下仅输出空行,无副作用),Debug模式下执行完整的Robocopy命令。


你之前方法出错的原因

  1. 直接将带空格的命令整体放入生成器表达式:CMake会把整个命令字符串当作单个参数处理,导致引号转义混乱,出现'"\"robocopy这类无效命令。
  2. 生成器表达式的解析规则:CMake对生成器表达式包裹的内容会进行特殊解析,带空格的命令必须拆分为命令+独立参数,分别用生成器表达式控制,才能被正确识别为多个命令行参数,而非单个带空格的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:45:31