【问题标题】:$(MAKE) in makefile gets evaluated to make instead of nmakemakefile 中的 $(MAKE) 被评估为 make 而不是 nmake
【发布时间】:2020-10-01 20:40:37
【问题描述】:

我试图按照这篇文章中提到的步骤在我的远程桌面上安装 libcurl 库:How do you properly install libcurl for use in visual studio 2017?

但是当我运行这个命令行 nmake /f Makefile.vc mode=static 时,我收到了这个错误: make-3.80:*** 没有规则来制作目标'/NOLOGO'。停止

这个错误来自 Makefile.vc 中的这一行:

@$(MAKE) /NOLOGO /F MakefileBuild.vc

在谷歌搜索该问题并浏览 Visual Studio 文档后,我发现 /NOLOGO 只是一个选项,但不知何故被视为文件(从上述错误可以看出)。

所以我尝试在本地机器上执行相同的步骤,并且能够安装 libcurl 库。 然后我尝试查看 $(MAKE) 在我的本地计算机和远程桌面上的评估结果,我发现了以下内容:

在我的本地机器上, $MAKE 是“C:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\nmake.exe”

在我的远程桌面上,$MAKE 是 make-3.80

谁能建议这里可能出现什么问题? (在这两种情况下,我都使用 nmake 运行相同的命令)

【问题讨论】:

  • 听起来有点像远程机器甚至不是 Windows 机器。你可以在命令行覆盖变量,比如make MAKE=c:\horrible\windows\cruft`
  • @tripleee 实际上是一个 Windows 系统。关于您提供的命令行,我尝试执行它,但它给出了错误说明 make: *** empty variable name。停止。
  • 但是你不觉得,因为 nmake 被称为 $(MAKE) 应该是指 nmake.exe 而不是 make-3.80 ,并且不应该有任何需要覆盖变量明确地,还是我缺少一些设置?

标签: makefile libcurl nmake


【解决方案1】:

根据documentation,环境变量优先于内置变量:

如果一个宏有多个定义,NMAKE 使用最高优先级的定义。以下列表显示了优先顺序,从高到低:

  • 在命令行中定义的宏
  • 在 makefile 或包含文件中定义的宏
  • 继承的环境变量宏
  • Tools.ini 文件中定义的宏
  • 预定义的宏,例如 CC 和 AS

MAKE环境变量被定义时,它将接管内置值。

【讨论】:

    【解决方案2】:

    实际上,远程桌面的 MAKE 环境变量设置为 make-3.80 ,这实际上导致执行 make 而不是 nmake。删除环境变量我成功构建了库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多