如何在Windows中安装和使用"make"?

How to install and use "make" in Windows?

我正在按照某人的说明进行操作,我将其存储库克隆到了我的机器上。我想使用 make 命令作为设置代码环境的一部分,但我使用的是 Windows。我在网上搜索,但我只能找到一个 make.exe 文件,一个 make-4.1.tar.gz 文件(我不知道接下来要做什么)以及如何下载 MinGW 的说明(对于 GNU;但是之后安装它我没有发现任何提及“make”)。

如何在没有 GNU 编译器或相关软件包的情况下在 Windows 中使用 make

make 是一个 GNU 命令,因此在 Windows 上获得它的唯一方法是安装 Windows 版本,如 GNUWin32 提供的版本。无论如何,有几种选择:

  1. 最简单的选择是使用Chocolatey。首先你需要安装这个包管理器。安装后,您只需安装 make(您可能需要 运行 在 elevated/admin 命令提示符下):

    choco install make
    
  2. 其他推荐的选项是 installing a Windows Subsystem for Linux (WSL/WSL2),因此您可以在 Windows 10 中嵌入您选择的 Linux 分布,您将能够安装 makegcc 以及构建 C 程序所需的所有工具。

  3. 对于旧的 Windows 版本(MS Windows 2000 / XP / 2003 / Vista / 2008 / 7 with msvcrt.dll)你可以使用 GnuWin32.

一个过时的选择是 MinGw,但该项目似乎已被放弃,因此最好选择以前的选择之一。

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

另一种方法是通过 Chocolatey 安装 make(正如@Vasantha Ganesh K 所指出的)

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

  1. 安装 Msys2 http://www.msys2.org
  2. 关注installation instructions
  3. Install make$ pacman -S make gettext base-devel
  4. C:\msys64\usr\bin\ 添加到您的路径中

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

  • 在下载会话中,单击 完整包,来源除外

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

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

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

GNU make 在 chocolatey 上可用。

  • here 安装 chocolatey。

  • 然后,choco install make.

现在您可以在 windows.
上使用 Make 我试过在 MinGW 上使用它,但它应该也适用于 CMD。

如果您使用的是 Windows 10,它内置于 Linux 子系统功能中。只需启动 Bash 提示符(按 Windows 键,然后键入 bash 并选择 "Bash on Ubuntu on Windows"),cd 到您要创建的目录并键入 make.

FWIW,Windows 驱动器位于 /mnt,例如C:\ 驱动器是 /mnt/c Bash。

如果 Bash 在您的开始菜单中不可用,这里是打开 Windows 功能的说明(仅限 64 位 Windows):

https://docs.microsoft.com/en-us/windows/wsl/install-win10

另一种选择是,如果您已经安装了 minGW 并将 bin 文件夹添加到 Path 环境变量,则可以使用 "mingw32-make" 而不是 "make"。

您还可以创建从 "make" 到 "mingw32-make" 的符号链接,或者复制并更改文件名。我以前不会推荐这些选项,它们会起作用,直到你对 minGW 进行更改。

我可以建议一个循序渐进的方法。

  1. 访问GNUwin
  2. 下载Setup Program
  3. 按照说明安装 GNUWin。您应该注意安装应用程序的目录。 (您稍后会需要它1)
  4. 按照these instructions 并将make 添加到您的环境变量中。正如我之前告诉您的,现在是时候知道您的应用程序安装在哪里了。 仅供参考:默认目录是 C:\Program Files (x86)\GnuWin32\
  5. 现在,更新 PATH 以包含新安装程序的 bin 目录。 可能添加到路径的典型示例是:...;C:\Program Files (x86)\GnuWin32\bin

如果您想使用命令行模拟器 cmder,一个可能有用的解决方案。您可以选择安装软件包安装程序。首先,我们使用以下行在 windows 命令提示符中安装 chocately:

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
refreshenv

chocolatey安装完成后可以使用choco命令安装make。安装后,您需要为 /cmder/config/user_aliases.cmd 添加一个别名。应添加以下行:

make="path_to_chocolatey\chocolatey\bin\make.exe" $*

Make会在cmder环境下运行

  1. 安装 npm

  2. 安装节点

  3. 安装 Make

    node install make up
    node install make
    
  4. 如果以上命令显示任何错误,请安装 Chocolatey(choco)

  5. 打开 cmd 并复制并粘贴以下命令(从 chocolatey URL 复制的命令)

    @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command " [System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    

我曾经遇到过同样的问题。但我很惊讶没有在这里找到一个特定的解决方案。

从 GnuWin32 或通过 winget 安装是不错且简单的选择。但我只在那里找到了 make 3.8.1。这个版本缺少非常重要的选项-O,它可以在多线程编译时正确处理输出。

choco 目前似乎提供 make 4.3。所以人们可以期待那里的最新版本。

不过也有自编译的选项。如果你必须安装用于编译的make,这应该是一个有效的选项。

  1. 前往 https://www.gnu.org/software/make/ 并下载您喜欢的版本
  2. 解压缩 tar.gz 文件(使用 7zip 并解压缩文件两次以检索实际内容)
  3. 导航到创建的目录
  4. 在该目录中打开命令提示符
  5. 运行 build_w32.bat gcc 这将使用您需要提前安装的 gcc 编译器开始编译。当 运行ning build_w32.bat 没有任何选项时,他们尝试使用 MSVC 编译器。旁注:令我惊讶的是,gnu 不使用 gcc 作为默认设置,而是使用 MSVC :-)
  6. 忽略编译期间产生的警告。结果应该还是可以的
  7. 从目录 GccRel(使用 gcc 编译时)
  8. 中检索新的 gnumake.exe
  9. 将此文件放在你喜欢的地方并重命名为 make.exe
  10. 将位置添加到系统变量 %PATH%

正如其他人所指出的:如果您还通过其他程序安装了各种 make 版本,则此手动安装可能会导致冲突。

很有可能除了 GNU make 之外,您还需要许多 coreutils。 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,这对于某些构建系统来说可能是个问题。可以使用 ezwinports 的 make 和 Cygwin 或 MSYS2 的 bash 作为解决方法。
  • MSYS 1.19 已放弃。运行良好,但功能非常老旧(3.86 左右)
  • MSYS2 (https://www.msys2.org/) 运行良好,仅次于 ezwinports 的第二快解决方案。质量好,包管理器(pacman),所有工具可用。我会推荐这个。
  • MinGW放弃了?通常有 MSYS 1.19 与 MinGW 软件包捆绑在一起,其中包含一个旧的 make.exe。使用包中的 mingw32-make.exe,它是最新的。

请注意,您可能无法 select 您的环境。如果构建系统是为 Cygwin 创建的,它可能无法在不修改的情况下在其他环境中工作(make 语言是相同的,但转义、路径转换的工作方式不同,$(realpath) 在 Windows 路径上失败,DOS bat文件以 shell 脚本和许多类似问题开始)。如果它来自 Linux,您可能需要使用真正的 Linux 或 WSL。 如果编译器在 Linux 上 运行ning,则没有必要为 Windows 安装 make,因为您必须 运行 在 [=] 上同时安装 make 和编译器57=]。同样,如果编译器在 Windows 上 运行ning,WSL 也无济于事,因为在那个环境中你只能执行 Linux 工具,而不是 Windows 可执行文件.有点棘手!