繁体   English   中英

如何使用MinGW编译makefile?

[英]How to compile makefile using MinGW?

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

感谢帮助。

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

make 和 mingw32-make 有什么区别?

make 的“本机”(即:依赖于 MSVCRT)端口缺少某些功能,并且由于 Win32 上缺少 POSIX 而修改了功能。 MSYS 发行版中还存在一个依赖于 MSYS 运行时的 make 版本。 这个端口的运行更像是 make 的目的,并且在执行过程中减少了麻烦。 基于此,MinGW 开发人员/维护人员/打包人员决定最好重命名本机版本,以便“本机”版本和 MSYS 版本可以同时存在,而不会出现文件名冲突。

因此,查看 C:\\MinGW\\bin 目录并首先确定 make 可执行文件的内容,是否已安装。(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,然后重新制作。

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

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

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

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

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

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

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

添加以上内容并保存

在powershell中设置env变量

$Env:CC="gcc"

然后编译文件

make hello

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

请了解 automake 和 autoconf。

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

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

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

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM