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

CMake add_custom_command如何向文件写入带双引号的字符串?

CMake add_custom_command 写入带双引号字符串的解决方案

最终实现方案

优先使用CMake自带的-E write命令实现,完全规避echo、重定向带来的多层转义问题,写法如下:

add_custom_command(
    OUTPUT file
    # write命令会直接将第二个参数原封不动写入目标文件
    COMMAND ${CMAKE_COMMAND} -E write file "\"quoted string\""
    DEPENDS something
    VERBATIM
)

如果需要追加内容到文件末尾,CMake 3.18及以上版本可以加--append参数:

COMMAND ${CMAKE_COMMAND} -E write --append file "\"quoted string\""

原写法失效原因

之前的尝试遇到的是CMake多层转义叠加的问题:

  • CMake解析配置代码时会做一次转义处理
  • 命令执行时,对应平台的shell(bash/cmd等)会做第二次转义处理
  • 如果开启了VERBATIM参数,CMake还会自动对COMMAND中的特殊字符(包括重定向符号>、引号)做转义,直接写的>会被当成普通文本传给echo命令,不会触发重定向逻辑
  • 不同平台的echo命令对引号的处理逻辑存在差异,本身兼容性就差

复杂字符串的进阶写法

如果要写入的字符串包含大量引号、反斜杠,转义成本过高,可以使用CMake的括号参数语法,完全不需要手动转义:

add_custom_command(
    OUTPUT file
    COMMAND ${CMAKE_COMMAND} -E write file [=[
"带双引号的字符串"
同时包含'单引号'、\反斜杠、$变量符等特殊字符
]=]
    DEPENDS something
    VERBATIM
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:57:02