抱歉,如果这是一个相当愚蠢的问题,但我正在努力在NetBeans中设置C++ (这需要MinGW)。它在NetBeans的C/C++部分的文档中说,它只能与MSYS的make一起工作,而不能与MinGW的make一起工作。我想知道两者之间的区别,所以我用谷歌搜索了一下,找到了this question,上面说MinGW包含了两个不同的品牌,mingw32-make (MinGW的品牌)和make (微软的品牌)。然后我在MinGW网站的维基上做了一点挖掘,在常见问题解答中找到了这篇文章:
由于Win32上缺少
,make的“本机”(即:依赖于MSVCRT )端口缺少某些功能,并已修改了功能。在MSYS发行版中还存在一个依赖于MSYS运行时的make版本。此端口的操作更符合make的意图,并且在执行过程中带来的麻烦更少。基于此,MinGW开发人员/维护人员/打包人员决定最好重命名本机版本,以便“本机”版本和MSYS版本可以同时存在,而不会发生文件名冲突。
那么,如果make有两个副本,那么哪个副本在MSYS shell中可用,哪个副本在cmd.exe中可用?两者之间的主要区别是什么?
发布于 2014-08-25 14:41:55
MSYS版本和本机版本之间的主要实际区别是前者使用MSYS shell来执行其命令,而后者使用cmd。这意味着,使用MSYS版本的make,您可以编写与在Unix或Linux系统上相同的食谱,而使用原生Windows版本,您可能需要执行不同的操作。对于简单的命令执行,它们的工作方式是相同的,但对于更复杂的操作,它们的方法必须不同,因为cmd的语法与Unix shell有很大不同。
例如,您可以使用MSYS make处理像这样的递归构建:
recurse-subdirs:
for i in $(SUBDIRS); \
do \
cd $$i && make all || exit; \
done而使用原生版本的make时,您必须执行以下操作:
recurse-subdirs: FORCE
for %%i in ($(SUBDIRS)) do \
cd %%i && make all || exit对于MSYS,也可以安全地假设通常的Unix命令是可用的(例如,rm *.o),而对于本机make,您将希望使用Windows命令(例如,del *.o)。
哪个版本的make可用取决于您如何设置PATH。如果通过搜索PATH可以找到make的两个版本,一个名为make,一个名为mingw32-make,则这两个命令都可用。无论您使用的是MSYS shell还是cmd,都是如此。
https://stackoverflow.com/questions/18020816
复制相似问题