道歉,如果这是一个相当愚蠢的问题,但我正在努力在NetBeans中设置C ++(需要MinGW)。它在NetBeans的C / C ++部分的文档中说,它只适用于MSYS的make,而不是MinGW的make。我想知道两者之间的区别,所以我用Google搜索并提出了this question,其中说MinGW包含两个不同的品牌,mingw32-make
(MinGW的制作)和make
( MSYS的制作)。然后我在MinGW网站的维基上挖了一下,发现这篇文章埋在常见问题中:
某些人缺乏“本机”(即:MSVCRT依赖)make端口 功能和由于缺乏POSIX而具有修改的功能 在Win32上。 MSYS发行版中还存在一个make版本 这取决于MSYS运行时。这个端口更像make 旨在操作并在执行期间减少头痛。 基于此,MinGW开发人员/维护人员/包装商决定了这一点 最好重命名本机版本,以便“本机” 版本和MSYS版本可以同时存在而没有 文件名冲突。
那么,如果有两个make副本,哪一个在MSYS shell中可用,哪一个在cmd.exe
中可用?这两者之间的主要区别是什么?
答案 0 :(得分:16)
两者之间的主要实际区别,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
的方式。如果通过搜索make
找到两个版本的make,一个名为mingw32-make
,一个名为PATH
,则两个命令都可用。无论您使用的是MSYS shell还是cmd
。