转义 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
不同),而生成器表达式将在生成时稍后计算。
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
不同),而生成器表达式将在生成时稍后计算。