Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
powershell不将变量扩展为参数_Powershell_Variables_Cmake_Arguments - Fatal编程技术网

powershell不将变量扩展为参数

powershell不将变量扩展为参数,powershell,variables,cmake,arguments,Powershell,Variables,Cmake,Arguments,我在powershell脚本中使用了以下命令: $boostPath = "D:/lib/boost/1.62.0-vs2013-x64" cmake -S $cmakeRootPath -B $buildPath -G $cmakeGenerator -DBOOST_ROOT=$boostPath 使用此函数,变量$boostPath不会展开。我可以在FindBoost日志中看到 相反,如果我在脚本中 cmake -S $cmakeRootPath -B $buildPa

我在powershell脚本中使用了以下命令:

$boostPath = "D:/lib/boost/1.62.0-vs2013-x64"
cmake -S $cmakeRootPath -B $buildPath -G $cmakeGenerator -DBOOST_ROOT=$boostPath
使用此函数,变量$boostPath不会展开。我可以在FindBoost日志中看到

相反,如果我在脚本中

cmake -S $cmakeRootPath -B $buildPath -G $cmakeGenerator -DBOOST_ROOT="D:/lib/boost/1.62.0-vs2013-x64"
变量设置正确,cmake工作正常。如何使用变量正确给出参数?

在注释中提供了关键指针:

PowerShell将-DBOOST_ROOT=$boostPath这样的标记解析为文字-无法识别$boostPath变量引用,因此无法用其值替换它

PowerShell有时会使用未引用的复合令牌表现出令人惊讶的行为,总结如下

如果$boostPath不包含空格,则以下操作通常有效,并且肯定有效:

变量引用的双引号强制其展开

注:

由于PowerShell在后台执行重新引用,仅在需要时才保留可能从单引号转换而来的双引号。请参见,并且您的路径不包含空格,因此cmake将在命令行上看到逐字逐句的内容 -DBOOST_ROOT=D:/lib/boost/1.62.0-vs2013-x64-无引号

如果$boostPath确实包含空格,比如$boostPath=D:/lib 1/boost/1.62.0-vs2013-x64,PowerShell会将该参数作为一个整体进行双引号引用,以便cmake在命令行上看到的是逐字引用 -DBOOST_ROOT=D:/lib 1/boost/1.62.0-vs2013-x64

如果Windows[1]上的cmake确实需要。。。要使某些CLI(尤其是msiexec)不幸需要$boostPath值,请使用此变通方法—为简洁起见,省略了一个参数: 警告:如果PowerShell中断了对传递给外部程序的参数的重新排序,请参阅,如果该问题得到修复,请参阅,此解决方法将中断

[1] 只有在Windows上,控制台程序才需要自己将整个命令行解析为单个参数;在类似Unix的平台上,他们会明智地收到一系列逐字标记。

在注释中提供了关键指针:

PowerShell将-DBOOST_ROOT=$boostPath这样的标记解析为文字-无法识别$boostPath变量引用,因此无法用其值替换它

PowerShell有时会使用未引用的复合令牌表现出令人惊讶的行为,总结如下

如果$boostPath不包含空格,则以下操作通常有效,并且肯定有效:

变量引用的双引号强制其展开

注:

由于PowerShell在后台执行重新引用,仅在需要时才保留可能从单引号转换而来的双引号。请参见,并且您的路径不包含空格,因此cmake将在命令行上看到逐字逐句的内容 -DBOOST_ROOT=D:/lib/boost/1.62.0-vs2013-x64-无引号

如果$boostPath确实包含空格,比如$boostPath=D:/lib 1/boost/1.62.0-vs2013-x64,PowerShell会将该参数作为一个整体进行双引号引用,以便cmake在命令行上看到的是逐字引用 -DBOOST_ROOT=D:/lib 1/boost/1.62.0-vs2013-x64

如果Windows[1]上的cmake确实需要。。。要使某些CLI(尤其是msiexec)不幸需要$boostPath值,请使用此变通方法—为简洁起见,省略了一个参数: 警告:如果PowerShell中断了对传递给外部程序的参数的重新排序,请参阅,如果该问题得到修复,请参阅,此解决方法将中断


[1] 只有在Windows上,控制台程序才需要自己将整个命令行解析为单个参数;在类似Unix的平台上,它们会明智地接收一系列逐字标记。

PowerShell解析器将整个字符串-DBOOST_ROOT=$boostPath解释为开关参数。使用-DBOOST_ROOT=$boostPath,它应该可以工作。PowerShell解析器将整个字符串-DBOOST_ROOT=$boostPath解释为一个开关参数。使用-DBOOST_ROOT=$boostPath,它应该可以工作
cmake -S $cmakeRootPath -B $buildPath -G $cmakeGenerator -DBOOST_ROOT="D:/lib/boost/1.62.0-vs2013-x64"
cmake -S $cmakeRootPath -B $buildPath -G $cmakeGenerator -DBOOST_ROOT="$boostPath"
cmake -S $cmakeRootPath -B $buildPath -DBOOST_ROOT="`"$boostPath`""