【发布时间】:2012-03-17 23:29:08
【问题描述】:
我是一名 C++ 程序员,并且有在 Linux 上使用 GCC 的经验。我想在 Windows 中开发一个应用程序,所以我需要一份关于 mingw make 文件、变量和 mingw32-make 的完整指南。有没有人可以介绍一下这个资源?
【问题讨论】:
标签: c++ windows makefile mingw
我是一名 C++ 程序员,并且有在 Linux 上使用 GCC 的经验。我想在 Windows 中开发一个应用程序,所以我需要一份关于 mingw make 文件、变量和 mingw32-make 的完整指南。有没有人可以介绍一下这个资源?
【问题讨论】:
标签: c++ windows makefile mingw
mingw32-make 只是 GNU make 的预构建版本,所以
http://www.gnu.org/software/make/manual/ 应该有所有的
您需要的信息。
【讨论】:
$SHELL 环境变量,而Unix make 不这样做,当然,如果您使用$(shell ...),它将取决于您调用的shell 和您安装的工具。 (但如果 shell 是 bash,并且您在路径中安装了 CygWin,那么它的工作方式与 Unix 非常相似。)
make 的程序缺少某些功能,而不是名为 mingw32-make 的程序。 (但也许恰恰相反——页面不太清楚,我在网站上找不到任何其他文档。)
mingw32-make 实际上是 make 的不同版本,松散地修补以支持 Win32 样式的路径,如果与任何 Unix 样式的 shell 结合使用,将不正常工作 - 事实上,问题会如果在PATH 中找到sh,则会发生。通常,您不能使用为make 编写的相同makefile 和mingw32-make。
minggw32-make 似乎已被删除,并且它的使用可能已从任何最近的 mingw 包中被弃用,至少在 Cygwin 上。我已经很多年没看到这个了,除非我错过了什么。
我遇到的主要区别是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 上一样。
【讨论】: