MinGW制作MSYS制作和哪个制作在哪里有什么区别?

时间:2013-08-02 15:33:13

标签: makefile mingw

道歉,如果这是一个相当愚蠢的问题,但我正在努力在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中可用?这两者之间的主要区别是什么?

1 个答案:

答案 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

,都是如此