【问题标题】:The term 'nmake' is not recognized [duplicate]无法识别“nmake”一词[重复]
【发布时间】:2018-04-24 13:56:30
【问题描述】:

我做错了,但我不知道是什么。我有一个 PowerShell 脚本,其中有一个像这样的变量:

$VCVARSALLBAT = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"

现在,在这个脚本中,我想调用这个 vcvarsall.bat 这样做:

& "$($VCVARSALLBAT)" x86_amd64

从我看到的输出中,它运行了。打完vcvarsall.bat之后,我打给nmake

即我的脚本如下所示:

$VCVARSALLBAT = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"
& "$($VCVARSALLBAT)" x86_amd64
nmake

我收到此错误消息:

nmake :术语“nmake”不被识别为 cmdlet、函数的名称, 脚本文件或可运行的程序。检查名称的拼写,或者如果路径 已包含,请验证路径是否正确,然后重试。 在 ...:214 字符:1 + nmake + ~~~~~ + CategoryInfo : ObjectNotFound: (nmake:String) [], ParentContainsErrorRecordException +fullyQualifiedErrorId:CommandNotFoundException

奇怪的是:当我进入Windows的普通命令行并调用以下语句时,我可以毫无错误地调用nmake

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
nmake

【问题讨论】:

  • 您运行的是 x64 PowerShell 还是 x86?我的猜测是,当您想运行 32 位时,您正在运行 64 位。

标签: powershell visual-studio-2017 nmake


【解决方案1】:

如果nmake 是一个程序,请尝试nmake.exenmake.exe 需要在您的路径中才能正常工作。如果不是,您可以 (a) 指定可执行文件的完整路径 (b) 或将可执行文件添加到您的路径。您可以通过在 Powershell 或 CMD 提示符下调用 where.exe nmake 来查看可执行文件是否在您的路径中。

添加到答案

where.exe 是这样做的...

如果您在 CMD 中找到某些内容但在 Powershell 中没有找到,我会验证您的路径是否匹配:

如果给定程序在您的路径中,where.exe 会找到它,即使在 Powershell 中也是如此。

对于原始帖子,您得到的标准是“我找不到您的命令”。 Powershell 的异常:

如果你真的想测试是否可以从 Powershell 调用 exe,显式调用它:

'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.13.26128\bin\Hostx86\x86\nmake.exe'

如果可行并且您想通过程序名称调用它,请仔细检查您的路径。

【讨论】:

  • 我试过nmake.exe,但我仍然得到同样的错误。在我的情况下,在 Powershell 中调用 & "$($VCVARSALLBAT)" x86_amd64 应该将路径设置为 nmake.exe,但 Powershell 不会识别它。
  • 您是否使用where.exe 来查看nmake.exe 是否在您的路径中?
  • 如果批处理文件的目的是填充环境变量,那么您不能只从 PowerShell 运行它。 (这是因为 PowerShell 使用 cmd.exe 执行脚本,但是当 cmd.exe 终止时,变量会被释放。)请参阅重复链接中的答案以获取解决此问题的 PowerShell 函数。
  • Visual Studio 带有几个这种类型的批处理文件。您不能直接在 PowerShell 中执行它们并使环境变量保持不变。我写的函数(问题评论中的链接)可以解决这个限制。
  • 我想你可能误会了。简单地将nmake.exe 目录添加到Path 变量不会有帮助,因为 VS 批处理脚本设置了一组其他相关的环境变量,所有这些变量都必须设置为命令行构建工作。
猜你喜欢
  • 1970-01-01
  • 2018-07-21
  • 2011-04-27
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
相关资源
最近更新 更多