【问题标题】:Powershell not passing arguments to cmake properlyPowershell没有正确地将参数传递给cmake
【发布时间】:2015-11-30 17:12:46
【问题描述】:

我正在尝试使用 Powershell 作为我在 Windows 10 中的主要 shell。大多数情况下它运行良好,但有些事情导致我回到旧的命令提示符,我希望他们不会这样做。

我正在尝试使用 cmake 创建 Visual Studio 解决方案。这是在命令提示符下正常工作的命令行(为了清楚起见,分成几行)

cmake .. -G "Visual Studio 14 2015" -A x64 
         -DBOOST_ROOT=d:\boost\1_59_0 
         -DBOOST_LIBRARYDIR=d:\boost\1_59_0\lib64

当我从 Powershell 运行相同的命令时,cmake 抱怨我没有指定 BOOST_ROOT。

我尝试使用& cmake ...,我尝试在所有-D 周围加上引号(如here 所述) - 没有任何效果。我只是不能让 Powershell 将命令行按原样传递给 cmake。

有没有办法告诉 Powershell 将 'cmake' 后面的文本直接传递给 cmake 而无需任何进一步处理?请注意,我不能在所有参数周围加上引号,因为它们已经包含引号(-G...)。如果我在所有内容都加上单引号 - 它仍然不起作用。

【问题讨论】:

  • 这是您在问题中的完整命令吗?我试过你的命令,用 cmake 代替一个叫做 echoargs 的程序,它只是打印回它得到的参数。看来 powershell 正确传递了所有参数。
  • 你试过转义参数--% 吗? (适用于 PS V3)
  • @DanL,是的,这是我的全部命令。从命令提示符工作,从 Powershell 失败。
  • 你可以试试这个Start-Process cmake -ArgumentList "-G ""Visual Studio 14 2015"" -A x64 -DBOOST_ROOT=d:\boost\1_59_0 -DBOOST_LIBRARYDIR=d:\boost\1_59_0\lib64"
  • 我必须添加 -NoNewWindow 标志,但是是的 - 它有效。等我完成后按回车...

标签: powershell


【解决方案1】:

要在 PowerShell 中启动外部程序,最好使用 Start-Process 及其 -ArgumentList 参数:

Start-Process cmake -ArgumentList "-G ""Visual Studio 14 2015"" -A x64 -DBOOST_ROOT=d:\boost\1_59_0 -DBOOST_LIBRARYDIR=d:\boost\1_59_0\lib64" -NoNewWindow

可以在Microsoft help 上找到有关此 Cmdlet 的更多信息,或者在 PowerShell 中使用以下命令:

Get-Help Start-Process -ShowWindow

【讨论】:

  • 太棒了!现在我需要把它变成一个方便的函数,让我不用输入 -NoNewWindow、-Wait、-ArgumentList 和引号。
  • @zmbq 您究竟是如何通过Start-Process 方法指示cmake 使用父文件夹(来自您的问题的cmake ..)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多