makefile 中的 $(MAKE) 被评估为 make 而不是 nmake

$(MAKE) in makefile gets evaluated to make instead of nmake

我试图按照 post 中提到的步骤在我的远程桌面上安装 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)\MicrosoftVisualStudio17\Professional\VC\Tools\MSVC.16.27023\bin\HostX86\x86\nmake.exe"

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

任何人都可以建议这里可能是什么问题吗? (在这两种情况下,我都是 运行 使用 nmake 的相同命令)

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

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

If a macro has multiple definitions, NMAKE uses the highest-precedence definition. The following list shows the order of precedence, from highest to lowest:

  • A macro defined on the command line
  • A macro defined in a makefile or include file
  • An inherited environment-variable macro
  • A macro defined in the Tools.ini file
  • A predefined macro, such as CC and AS

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