CMake报价逃脱conumdrum

时间:2016-11-16 07:26:52

标签: cmake escaping double-quotes

我似乎无法绕过CMake的逃生规则。给出:

set(X A B C)
add_custom_target( works COMMAND DUMMY=0 X="${X}" env | grep ^X= COMMENT "This works")
add_custom_target( fails COMMAND X="${X}" env | grep ^X= COMMENT "This fails")

目的是执行命令X="A B C" env。自定义目标works正确构造命令,而fails错误地执行:

X=\"A B C\" env ...

但为什么?

1 个答案:

答案 0 :(得分:0)

实际上你遇到了两个问题:

  1. 不要在自定义命令中引用CMake变量。 CMake将为您完成必要的转义序列。
  2. 假定COMMAND之后的第一个文字是命令名称或文件。因此,CMake尝试将其作为单个“字符串”处理。
  3. 所以我更改了引用和env调用,以下内容对我有效:

    cmake_minimum_required(VERSION 2.8)
    
    project(QuotedStrings)
    
    set(X "A B C")
    add_custom_target( works COMMAND env DUMMY=0 X=${X} | grep ^X= COMMENT "This works")
    add_custom_target( fails_no_more COMMAND env X=${X} | grep ^X= COMMENT "This works too")
    

    有关详细信息和可能性,请参阅: