如何在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个回答

4

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

您还可以从“make”创建符号链接到“mingw32-make”,或者复制并更改文件的名称。我不建议在minGW上进行更改之前使用这些选项。


4
我曾经也遇到过同样的问题。但是令人惊讶的是在这里没有找到一个特定的解决方案。
通过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编译器开始编译,您需要提前安装。当运行build_w32.bat时,不带任何选项,它们会尝试使用MSVC编译器。旁注:我发现GNU不使用gcc作为默认值,而是使用MSVC,这令人惊讶:-)
  6. 忽略编译期间创建的警告。结果应该还不错
  7. 从GccRel目录中检索新的gnumake.exe(使用gcc编译)
  8. 将此文件放在您喜欢的位置并将其重命名为make.exe
  9. 将位置添加到系统变量%PATH%

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


0

如果您想使用命令行模拟器cmder,可能有一个有用的解决方案。您可以安装包管理器chocately。首先,在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
  1. 安装npm

  2. 安装Node

  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"
    

4
2018年有一个已删除的答案提出了相同的建议。它有以下评论:"npm"的"make"包不是大多数构建脚本所期望的GNU Make的同一物品:它是JavaScript中make的重新实现,不能保证与传统的makefile完全兼容,这在npm上的包页面中有记录:“make.js”使用的解析器很小并且有其缺陷,但对于大多数Makefile,make.js能够正确解析它们。”-因此这不是OP正在寻找的内容。 - tripleee

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