转义 CMake 中的特殊选项

Escape special options in CMake

CMake 使用命名参数,但如何指定一个参数,其值与参数名称完全相同?

示例:

set(msg "COMMAND")
add_custom_command(TARGET tgt COMMAND echo ${msg})

将不起作用,因为 ${msg} 被解释为选项的名称,而不是命令 echo 的参数。所以它会在没有任何参数的情况下执行 echo

输出:command ECHO activated.(在 Windows 上)

想要的输出:COMMAND

CMake use named arguments

CMake 使用命名参数!它有参数列表,command-specific“关键字”只是参数子列表的分隔符。

对于这个特定的命令,您可以使用 always-true 生成器表达式来“转义”它:

set(msg COMMAND)
add_custom_command(
  TARGET tgt
  COMMAND echo "$<1:${msg}>"
)

这是有效的,因为参数在配置时立即匹配($<1:COMMAND>COMMAND 不同),而生成器表达式将在生成时稍后计算。