MinGW的制作和MSYS的制作有哪些区别,哪个可用?

Nat*_*055 21 mingw makefile

抱歉,如果这是一个相当愚蠢的问题,但我正在努力在NetBeans中设置C++(需要MinGW).它在NetBeans的C/C++部分的文档中说,它只适用于MSYS的make,而不是MinGW的make.我想知道两者之间的区别,所以我用Google搜索并提出这个问题,说明MinGW包含两种不同的产品,mingw32-make(MinGW的制作)和make(MSYS的制作).然后我在MinGW网站的维基上挖了一下,发现这篇文章埋在FAQ中:

"本机"(即:MSVCRT依赖)make端口缺少某些功能,并且由于Win32上缺少POSIX而具有修改的功能.MSYS发行版中还存在一个依赖于MSYS运行时的make版本.该端口的操作更多,因为make旨在操作并且在执行期间减少了麻烦.基于此,MinGW开发人员/维护人员/打包者决定最好重命名本机版本,以便"本机"版本和MSYS版本可以同时存在而不会发生文件名冲突.

那么,如果有两个make副本,哪一个在MSYS shell中可用,哪一个可用cmd.exe?两者之间的主要区别是什么?

Ros*_*dge 17

两者之间的主要实际区别,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
Run Code Online (Sandbox Code Playgroud)

使用make的原生版本时,您必须执行以下操作:

recurse-subdirs: FORCE
    for %%i in ($(SUBDIRS)) do     \
        cd %%i && make all || exit
Run Code Online (Sandbox Code Playgroud)

使用MSYS也可以安全地假设通常的Unix命令可用(例如rm *.o),而使用本机make则需要使用Windows命令(例如del *.o).

哪个版本的make可用取决于您如何设置PATH.如果通过搜索找到两个版本的make,一个命名make,一个命名mingw32-make,PATH则两个命令都可用.无论您使用的是MSYS shell还是cmd.