如何在Windows系统中安装和使用“make”?

383

我正在按照我克隆到本地的某个人的代码库的指示进行操作。作为设置代码环境的一部分,我想要使用make命令,但我使用的是Windows系统。我在网上搜索,但只找到了一个make.exe文件,一个make-4.1.tar.gz文件(我不知道该如何处理),以及有关如何下载MinGW(针对GNU的软件;但安装后我没有找到任何有关“make”的提及)的说明。

如何在Windows中使用make而不需要GNU编译器或相关软件包?


9
仅仅安装“make”可能不足以解决你的问题。许多Makefile是为类Unix系统编写的,需要你安装大量额外的实用工具(包括支持编译代码的编译器,如项目涉及编译代码),例如Cygwin,或者如果你真的不能完全摆脱Windows,可以考虑切换到类Unix平台,比如WSL。 - tripleee
14个回答

542
make 是一个GNU命令,所以在Windows上获取它的唯一方法是安装一个Windows版本,比如GNUWin32提供的版本。无论如何,有几种获取该命令的选项:
  1. 直接从适用于Windows的制作下载。

  2. 使用Chocolatey。首先需要安装这个软件包管理器。安装完成后,只需安装make(可能需要在提升/管理员命令提示符中运行):

    choco install make
  3. 另一个推荐的选项是安装Windows子系统 for Linux (WSL/WSL2),这样你就可以在Windows 10中嵌入一个你选择的Linux发行版,在其中安装makegcc和构建C程序所需的所有工具。

  4. 对于旧版本的Windows(MS Windows 2000 / XP / 2003 / Vista / 2008 / 7,带有msvcrt.dll),您可以使用GnuWin32

一个过时的替代方案是MinGw,但该项目似乎已经被放弃了,所以最好选择之前的其中一个选项。

11
更简单的方法是创建符号链接:mklink C:\bin\make.exe C:\MinGW\bin\mingw32-make.exe。因此,如果将来您升级了Mingw,该链接将仍然有效。 - kumarharsh
3
仅使用MSYS2时,我无法使用mklink。MSYS2的pacman可以安装make,即pacman -S make,但是它不能正常工作。相反,在msys64/mingw64/bin中已经存在mingw32-make.exe。也许它是随着gcc一起发布的。我不明白为什么它不只是被称为make.exe。我只是将它复制到了make.exe - Neonit
7
提醒一下,Visual Studio自带一个名为'nmake'的“make”实用工具,请参阅文档。它可以从VS命令提示符中使用,但你当然也可以将其添加到路径中。 请注意,与GNU make相比,功能非常有限,并且文档几乎不存在... - jmon12
2
@notacorn 有点类似,但你可以从它们两个中访问你的“Windows”文件夹。Git bash 使用 /c,WSL 使用 /mnt/c。 - Eduardo Yáñez Parareda
2
Make是GNU命令...有点像,但并不完全相同。原始的Make几十年前是一个Unix工具。然后GNU克隆了它。然后GNU对其进行了广泛的增强,以至于他们不得不放弃向后兼容性。GNU版本要好得多,以至于很少有人再使用原始的Unix版本,而且它已经大部分消失了。许多Linux系统包含原始的Make(称为“make”)和GNU版本的Make(称为“gmake”)。 - Chuck Kollars
显示剩余13条评论

306

GNU make可以在chocolatey上使用。

  • 这里安装chocolatey。

  • 然后运行choco install make进行安装。

现在您就可以在 Windows 上使用 Make 了。
我曾尝试在 MinGW 上使用它,但应该也可以在 CMD 上使用。


1
注意:您可能需要使用choco config set proxy ADDRESS:PORT命令来设置正确的代理。 - weshouman
如果您不喜欢使用管理员PowerShell会话,也可以使用Scoop:https://github.com/lukesampson/scoop/wiki/Chocolatey-Comparison - Jonathan E. Landrum
那我该如何进行配置呢? - PRMan
3
似乎 Chocolatey 不应该用于商业用途 https://chocolatey.org/terms? - Muhammad Yasirroni

63
在Windows 10或11上,您可以在命令行或PowerShell中运行命令winget install GnuWin32.Make来快速安装它。然后您可以使用命令make
附注:您可能需要将C:\Program Files (x86)\GnuWin32\bin添加到Windows环境变量PATH中,以便快速访问该命令(感谢JobaDiniz提供的提示)。
不再需要安装choco。

32
这几乎可以工作。您还需要将 C:\Program Files (x86)\GnuWin32\bin 添加到 Windows PATH 环境变量中。 - JobaDiniz
3
可执行文件也称为make.exe而不是cmake.exe,因此命令也是“make”。 - Sgraffite
4
在choco上安装最新版本的make。choco make --version - GNU Make 4.4.1,winget make --version - GNU Make 3.81 - Hrishikesh Kadam
2
这个答案应该放在最上面。 - undefined
我不得不从msstore更改源:winget install --source winget GnuWin32.Make - undefined

27

一般来说,接受的答案是个坏主意,因为手动创建的 make.exe 将会存在并可能引起意外问题。它实际上破坏了RubyInstaller:https://github.com/oneclick/rubyinstaller2/issues/105

另一个选择是通过 Chocolatey 安装 make (正如 @Vasantha Ganesh K 指出的那样)

另一个选择是通过 Chocolatey 安装 MSYS2 并从 C:\tools\msys64\usr\bin 使用 make。如果 make 没有随 MSYS2 自动安装,则需要通过 pacman -S make 手动安装(正如 @Thad Guidry 和 @Luke 指出的那样)。


3
我使用Chocolatey安装了这个软件,但是在C:\tools\msys64\usr\bin目录下没有make.exe文件? - Rosdi Kasim
2
你可以在那个文件夹中找到Pacman,之后使用@thad的第三步。 - Luke

22
如果您正在使用Windows 10,则内置了Linux子系统功能。只需启动Bash提示符(按Windows键,然后键入bash并选择“在Windows上的Ubuntu中的Bash”), cd 进入要创建的目录,并键入make 。
顺便提一下,Windows驱动器位于/mnt 中,例如C:\ 驱动器在Bash中为 /mnt/c 。
如果在开始菜单中找不到Bash,请按以下说明打开该Windows功能(仅适用于64位Windows): https://learn.microsoft.com/en-us/windows/wsl/install-win10

1
它不起作用。Shell 立即消失。 - KansaiRobot
3
这并没有回答问题,因为它没有在Windows上安装。这里使用的make将成为一个构建链的一部分,将构建Linux二进制文件,而不是Windows二进制文件。 - Pod
它可能无法回答问题,但解决了我的问题。使用 $ sudo apt install make 进行安装。 - jay fall
这是否可接受取决于特定的Makefile。如果您拥有所需的工具,则不编译任何特定平台的二进制文件的工具流水线可能会正常工作;编译C(或Fortran、C ++等)项目的Makefile可能由于许多原因而无法正常工作,包括(如先前评论中指出的)它即使能够工作,最终结果也不是有效的Windows二进制文件。 - tripleee
@jayfall apt软件包管理器是特定于Debian Linux和类似Ubuntu的派生发行版的。这就是WSL开箱即用的方式,但您可以配置它以运行其他需要不同软件包管理器的Linux变体。对于基于RPM的发行版,如CentOS和Fedora,有yumdnf;对于Alpine等,有apk,Arch使用pacman等等。 - tripleee

16

请从他们的官方网站GnuWin32下载make.exe。

  • 在“Download”部分,点击Complete package, except sources

  • 按照安装说明进行安装。

  • 安装完成后,将<installation directory>/bin/添加到PATH变量中。

现在您就可以在cmd中使用make了。


请问您能帮我设置目录到PATH变量中吗? - shomit
@shomit 开始在Windows操作系统中搜索“环境”这个词(位于Windows按钮旁边的搜索框中)。当您看到“控制面板中编辑系统环境变量”的弹出窗口时,请选择它。系统属性 --> 高级选项卡应该会弹出一个应用程序。找到底部标有“环境变量”的按钮。 - zipzit
这个不起作用。我尝试了这个方法,但是出现了错误,提示程序是为32位系统构建的,而win10是64位的。是否有适用于Windows 10的make工具? - KansaiRobot

16

8
除了GNU make之外,你还需要许多核心工具。如Touch、rm、cp、sed、test、tee、echo等。构建系统可能需要bash功能,即使为了其他目的,使用进程ID($$$$)创建临时文件名也很流行。没有bash就无法工作。你可以通过流行的Windows POSIX模拟器获得所有这些,其中包括:
  • Cygwin (http://www.cygwin.org/) 可能是最受欢迎,最兼容POSIX的模拟器。对于Windows路径有一些困难,速度较慢。
  • GNUWin (http://gnuwin32.sourceforge.net/) 曾经很好很快,但现在已经被放弃。没有提供bash,但可以从其他软件包中使用它。
  • ezwinports (https://sourceforge.net/projects/ezwinports) 是我当前最喜欢的模拟器。速度快,效果好。没有提供bash,这可能对某些构建系统造成问题。可以使用来自Cygwin或MSYS2的make和bash进行解决。
  • MSYS 1.19 被放弃。效果很好,但包含非常旧的make(大约是3.86)。
  • MSYS2 (https://www.msys2.org/) 效果很好,在ezwinports之后是第二快的解决方案。质量好,有包管理器(pacman),提供所有工具。我建议使用这个。
  • MinGW 被放弃?通常会捆绑MSYS 1.19与MinGW软件包一起提供,其中包含一个旧版本的make.exe。使用软件包中的mingw32-make.exe,那个版本更加更新。

请注意,您可能无法选择自己的环境。如果构建系统是为Cygwin创建的,则在没有修改的情况下可能无法在其他环境中运行(make语言相同,但转义、路径转换不同工作,$(realpath)在Windows路径上失败,DOS批处理文件作为脚本启动,以及许多类似问题)。如果是来自Linux,则可能需要使用真正的Linux或WSL。 如果编译器在Linux上运行,则在Windows上安装make没有意义,因为您必须在Linux上同时运行make和编译器。同样,如果编译器在Windows上运行,则WSL不会有任何帮助,因为在该环境中,您只能执行Linux工具,而不能执行Windows可执行文件。这有点棘手!


6

您还可以安装 scoop ,然后运行:

scoop install make

5

我可以建议一种逐步的方法。

  1. 访问GNUwin
  2. 下载安装程序
  3. 按照说明安装GNUWin。您应该注意应用程序正在安装的目录。(稍后会需要它1)
  4. 按照这些说明将make添加到您的环境变量中。正如我之前告诉过您的,现在是时候知道您的应用程序安装在哪里了。 提示:默认目录为C:\Program Files (x86)\GnuWin32\
  5. 现在,更新PATH以包括新安装程序的bin目录。 一个典型的例子是: ...;C:\Program Files (x86)\GnuWin32\bin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接