【问题标题】:What are the differences between MinGW's make and MSYS's make and which one is available where?MinGW 的品牌和 MSYS 的品牌有什么区别,哪一个在哪里可用?
【发布时间】:2013-08-03 22:56:09
【问题描述】:

抱歉,如果这是一个相当愚蠢的问题,但我正在努力在 NetBeans 中设置 C++(这需要 MinGW)。它在 NetBeans 的 C/C++ 部分的文档中说,它只适用于 MSYS 的 make,而不是 MinGW 的 make。我想知道两者之间的区别,所以我用谷歌搜索了它并想出了this question,它说MinGW 包含两种不同的品牌,mingw32-make(MinGW 的品牌)和make(MSYS 的品牌)。然后我在 MinGW 网站的 wiki 上挖了一点,发现这篇文章隐藏在常见问题解答中:

make 的“本机”(即:依赖于 MSVCRT)端口在某些方面缺少 由于缺少 POSIX 功能并修改了功能 在 Win32 上。 MSYS 发行版中还存在一个 make 版本 这取决于 MSYS 运行时。该端口的操作更多为 make 旨在操作并在执行过程中减少头痛。 基于此,MinGW 开发者/维护者/打包者决定 最好重命名本机版本,以便“本机” 版本和 MSYS 版本可以同时存在 文件名冲突。

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

【问题讨论】:

    标签: makefile mingw


    【解决方案1】:

    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 make 也可以安全地假设通常的 Unix 命令可用(例如。rm *.o),而使用本机 make 您将希望使用 Windows 命令(例如。del *.o)。

    可用的 make 版本取决于您如何设置 PATH。如果通过搜索PATH 可以找到两个版本的make,一个名为make,一个名为mingw32-make,那么这两个命令都将可用。无论您使用的是 MSYS shell 还是 cmd,都是如此。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2013-02-13
      • 1970-01-01
      • 2012-08-11
      • 2022-01-11
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多