"Mingw32-make 指南:制作 Mingw make 文件"

8

我是一名C++程序员,有GCC在Linux上的经验。我想要在Windows上开发一个应用程序,所以我需要一个完整的指南来了解mingw make文件、变量和mingw32-make。有人可以介绍一个关于这方面的资源吗?

2个回答

9

根据http://mingw.org/wiki/FAQ,mingw32-make与普通的make相比“缺乏一些功能”。 - Tormod Volden
2
@TormodVolden 很有趣。我不知道他们在谈论什么功能;我倾向于在CygWin下使用mingw32-make。它更快,而且至少在过去,一直更新得更及时。存在差异:mingw32-make尊重$SHELL环境变量,而Unix make则不尊重。当然,如果您使用$(shell ...),它将取决于您调用的shell和安装的工具。(但是如果shell是bash,并且您已经安装了CygWin并将其添加到了路径中,它几乎就像Unix一样工作。) - James Kanze
1
@TormodVolden 在重新阅读您引用的页面后,我理解它是在说MinGW发行版中名为make的程序缺少一些功能,而不是名为mingw32-make的程序。(但也许正好相反---页面并不太清楚,我在该网站上找不到其他相关文档。) - James Kanze
1
还有其他重要的区别。mingw32-make实际上是make的不同版本,它松散地修补了支持Win32风格路径,并且如果与任何Unix风格的shell一起使用,则无法正常工作 - 实际上,如果在PATH中找到sh,则会出现问题。通常,您不能使用为make编写的相同makefile来使用mingw32-make - alecov
似乎 minggw32-make 已被移除,并且在最近的 mingw 软件包中已经不再使用,至少在 Cygwin 上是如此。除非我错过了什么,否则我已经好几年没见到它了。 - not2qubit
显示剩余2条评论

1
我发现的主要区别是mingw32-make将使用Windows PATH。因此,如果您尝试从Git Bash运行它,它的行为可能不像您预期的那样(即,当您不希望时,它会调用bat脚本,而shims也无法正常工作)。
设置SHELL:= / bin / bash或类似内容不会产生任何影响(您可以通过运行make -d进行调试),但您仍然可以通过设置SHELL:= bash.exe来使用bash而不是sh。这并不能解决Windows PATH问题。
然而,我注意到如果我另外设置.SHELLFLAGS:= -euo pipefail -c,那么它在Git Bash中突然表现正常,就好像它开始使用类Unix路径(如果有人能确认/解释为什么,请告诉我们)。
因此,我最终在我的Makefile中使用了以下内容:
ifeq ($(OS),Windows_NT)
    SHELL := bash.exe
else
    SHELL := /usr/bin/env bash
endif
.SHELLFLAGS := -eo pipefail -c

使用这个设置,它在git bash中表现得像在Linux上一样正常。


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