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

使用CMake/Ninja的add_custom_command时如何转义$符号

CMake + Ninja 下自定义命令中$符号的正确转义方法

在使用CMake的add_custom_command配合Ninja构建系统时,$符号会被Ninja识别为特殊字符(用于伪规则或变量引用),同时CMake本身也会解析$(用于变量替换),所以需要做双层转义:

正确转义方式:使用四个美元符号 $$$$

原理是:

  1. CMake处理阶段:每两个连续的$会被替换成一个$,因此$$$$会被CMake解析为$$
  2. Ninja处理阶段:Ninja同样会把连续两个$替换成一个普通的$,最终传递给执行命令的就是单个$

修改后的代码示例:

add_custom_target(target1)

add_custom_command(TARGET target1
    COMMAND echo $$$$1222
)

执行后,实际运行的命令是echo $1222,会正确输出$1222,不会触发Ninja的伪规则解析。

为什么之前的写法不行?

  • 直接写$1222:CMake会把$1当作变量(未定义则为空),最终传给Ninja的是1222,完全丢失了$
  • 写$$1222:CMake解析后变成$1222传给Ninja,但Ninja会把$1视为伪规则/变量,依然会出现解析问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:43:11