【问题标题】:guide to mingw make files mingw32-makemingw make 文件指南 mingw32-make
【发布时间】:2012-03-17 23:29:08
【问题描述】:

我是一名 C++ 程序员,并且有在 Linux 上使用 GCC 的经验。我想在 Windows 中开发一个应用程序,所以我需要一份关于 mingw make 文件、变量和 mingw32-make 的完整指南。有没有人可以介绍一下这个资源?

【问题讨论】:

    标签: c++ windows makefile mingw


    【解决方案1】:

    mingw32-make 只是 GNU make 的预构建版本,所以 http://www.gnu.org/software/make/manual/ 应该有所有的 您需要的信息。

    【讨论】:

    • 根据mingw.org/wiki/FAQ mingw32-make 的说法是“缺少某些功能”。
    • @TormodVolden 很有趣。我不知道他们在谈论什么功能;即使在 CygWin 下,我也倾向于使用 mingw32-make。它更快,而且至少在过去,它是最新的。有区别:mingw32-make 尊重$SHELL 环境变量,而Unix make 不这样做,当然,如果您使用$(shell ...),它将取决于您调用的shell 和您安装的工具。 (但如果 shell 是 bash,并且您在路径中安装了 CygWin,那么它的工作方式与 Unix 非常相似。)
    • @TormodVolden 在重新阅读您网站的页面时,我理解它是说 MinGW 发行版中名为 make 的程序缺少某些功能,而不是名为 mingw32-make 的程序。 (但也许恰恰相反——页面不太清楚,我在网站上找不到任何其他文档。)
    • 还有其他重要的区别。 mingw32-make 实际上是 make 的不同版本,松散地修补以支持 Win32 样式的路径,如果与任何 Unix 样式的 shell 结合使用,将正常工作 - 事实上,问题会如果在PATH 中找到sh,则会发生。通常,您不能使用为make 编写的相同makefile 和mingw32-make
    • minggw32-make 似乎已被删除,并且它的使用可能已从任何最近的 mingw 包中被弃用,至少在 Cygwin 上。我已经很多年没看到这个了,除非我错过了什么。
    【解决方案2】:

    我遇到的主要区别是mingw32-make 将使用 Windows PATH。因此,如果您尝试从 git bash 运行它,它的行为将不会像您期望的那样(即,当您不期望它时,它会调用 bat 脚本,并且 shims 也不能正常工作)。

    设置SHELL := /bin/bash 或任何类似的设置不会产生任何效果(您可以通过运行make -d 进行调试),但您仍然可以通过设置SHELL := bash.exe 使其使用bash 而不是sh。但这并不能解决 Windows PATH 问题。

    我注意到的是,如果我另外设置了.SHELLFLAGS := -euo pipefail -c,那么它会突然在 git bash 中正常运行,就好像它开始使用类 Unix 路径一样(如果有人能准确地确认/解释原因,那就太好了)。

    所以我在Makefile 中得到了以下内容:

    ifeq ($(OS),Windows_NT)
        SHELL := bash.exe
    else
        SHELL := /usr/bin/env bash
    endif
    .SHELLFLAGS := -eo pipefail -c
    

    通过该设置,它在 git bash 中的行为似乎正常,就像在 Linux 上一样。

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 2014-07-26
      • 2012-08-18
      • 2021-07-20
      相关资源
      最近更新 更多