65

我是新手。只是想问如何编译一个makefile。我在 C 语言中使用 MinGW 编译器。我必须将所有文件保存在 MinGW\bin 中吗?因为现在我的文件在不同的目录中。

感谢帮助。

4

6 回答 6

50

摘自http://www.mingw.org/wiki/FAQ

make 和 mingw32-make 有什么区别?

make 的“本机”(即:依赖于 MSVCRT)端口缺少某些功能,并且由于 Win32 上缺少 POSIX 而修改了功能。MSYS 发行版中还存在一个依赖于 MSYS 运行时的 make 版本。该端口的操作更多地与 make 的预期操作相同,并且在执行期间减少了令人头疼的问题。基于此,MinGW 开发人员/维护人员/打包人员决定最好重命名本机版本,以便“本机”版本和 MSYS 版本可以同时存在而不会发生文件名冲突。

因此,请查看 C:\MinGW\bin 目录并首先确保您安装了什么可执行文件。(make.exe 或 mingw32-make.exe)

在使用 MinGW 之前,您应该添加 C:\MinGW\bin;使用http://www.mingw.org/wiki/Getting_Started/中提到的说明到 PATH 环境变量

然后 cd 到你的目录,你有 makefile 并尝试使用mingw32-make.exe makefile.in或简单地make.exe makefile.in(取决于 C:\MinGW\bin 中的可执行文件)。

如果您想要基于 GUI 的解决方案,请安装 DevCPP IDE,然后重新制作。

于 2012-08-02T10:32:04.220 回答
11

您必须主动选择安装 MSYS 才能获取 make.exe。因此,如果 MinGW 安装正确,您应该始终至少拥有(本机)mingw32-make.exe。如果您安装了 MSYS,您将拥有 make.exe(可能在 MSYS 子文件夹中)。

请注意,许多项目需要首先创建一个makefile(例如使用配置脚本或automake .am 文件),而这一步需要MSYS 或cygwin。让您想知道他们为什么要费心分发原生品牌。

一旦有了 makefile,就不清楚本机可执行文件是否需要与 MSYS make 不同的路径分隔符(正斜杠与反斜杠)。任何自动生成的 makefile 都可能具有 unix 样式的路径,假设本机 make 可以处理这些,编译的输出应该是相同的。

于 2015-08-13T11:41:17.387 回答
4

我在 C:\MinGW\bin 的 bin 中有 MinGW 和 mingw32-make.exe。同样,我将 bin 路径添加到我的 Windows 路径。之后,我将其名称更改为 make.exe 。现在我可以在我的 Makefile 方向上编写命令“make”并像 Linux 一样执行我的 Makefile。

于 2020-04-16T12:28:32.923 回答
2

首先检查 mingw32-make 是否安装在您的系统上。在 windows 终端或 cmd 中使用 mingw32-make.exe 命令检查,否则安装包 mingw32-make-bin。

然后转到 bin 目录默认 (C:\MinGW\bin) 创建新文件 make.bat

@echo off
"%~dp0mingw32-make.exe" %*

添加以上内容并保存

在powershell中设置环境变量

$Env:CC="gcc"

然后编译文件

make hello

其中 hello.c 是源代码的名称

于 2020-11-23T20:49:54.050 回答
0

请了解 automake 和 autoconf。

Makefile.am 由 automake 处理以生成一个 Makefile,该 Makefile 由 make 处理以构建您的源代码。

http://www.gnu.org/software/automake/

于 2012-08-02T08:53:58.567 回答
0

我在这里找到了一个很好的例子:https ://bigcode.wordpress.com/2016/12/20/compiling-a-very-basic-mingw-windows-hello-world-executable-in-c-with-a-生成文件/

它是一个在 windows 上使用 MinGW 的简单 Hello.c(您可以将 c++ 与 g++ 一起使用而不是 gcc)。

Makefile 看起来像:

EXECUTABLE = src/Main.cpp

CC = "C:\MinGW\bin\g++.exe"
LDFLAGS = -lgdi32

src = $(wildcard *.cpp)
obj = $(src:.cpp=.o)

all: myprog

myprog: $(obj)
    $(CC) -o $(EXECUTABLE) $^ $(LDFLAGS)

.PHONY: clean
clean:
    del $(obj) $(EXECUTABLE)
于 2020-01-20T10:25:17.830 回答