Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake quote escape conumdrum_Cmake_Escaping_Double Quotes - Fatal编程技术网

CMake quote escape conumdrum

CMake quote escape conumdrum,cmake,escaping,double-quotes,Cmake,Escaping,Double Quotes,我似乎无法理解克马克的逃跑规则。鉴于: 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。自定义目标工作正确构造命令,其中as失败错误执行: X=\"

我似乎无法理解克马克的逃跑规则。鉴于:

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
。自定义目标
工作
正确构造命令,其中as
失败
错误执行:

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

但是为什么呢?

实际上,您遇到了两个问题:

  • 不要在自定义命令中引用CMake变量。CMake将为您执行必要的转义序列
  • 假定
    命令
    后的第一个文本是命令名或文件。因此,CMake尝试将其作为单个“字符串”处理
  • 因此,我更改了报价和
    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")
    
    有关更多详细信息和可能性,请参阅:


    Do-try
    set(X“A B C”)
    的可能重复项以及在
    ${X}
    @Florian,
    set(X“A B C”)
    的结果是:
    “X=”A B C \“env
    ,这仍然是错误的。我遇到了完全相同的问题,
    外部项目添加步骤(命令构建--args=“my args”)
    将执行
    build--args=\“我的args\”
    这是不正确的。如果我今晚找不到解决办法,我就开始悬赏。