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

怎么避免CMake在带空格的字符串中自动添加转义反斜杠

CMake参数拼接传递时自动转义空格的解决方案

问题根因

你遇到的转义问题是CMake的正常参数解析逻辑导致的:你将所有参数拼接成了单个长字符串变量,CMake在将该变量传递给COMMAND类指令(包括execute_process、add_custom_command等)时,会把整个字符串识别为一个独立的命令行参数,因此会自动对字符串内部的空格加反斜杠转义,避免被系统拆分为多个参数。
而message命令输出时不会做命令行参数的转义处理,所以你会看到打印结果符合预期,但实际传递给执行程序时参数格式错误。

正确实现方式

不要手动拼接参数字符串,改用CMake列表存储参数,CMake会自动将列表的每个元素识别为独立的命令行参数,不会额外加转义符。
修改后的代码如下:

set(excludes "")
foreach(XFILES IN LISTS ARGN)
  # 每次往列表中追加两个独立元素:--exclude 和 对应的过滤规则
  list(APPEND excludes "--exclude" "${XFILES}")
endforeach()

# 后续传递给命令时直接使用${excludes}即可,不要加外层双引号
# 示例:add_custom_command(COMMAND your_prog ${excludes} ...)

注意事项

  • 传递列表参数时不要给变量套外层双引号,例如写COMMAND your_prog ${excludes}即可,如果写成COMMAND your_prog "${excludes}"会把整个列表重新转为单个字符串,再次触发转义问题。
  • 列表在message打印时会显示成分号分隔的形式,属于正常现象,传递给命令时会自动转为空格分隔的独立参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:03