如何在Windows上使用GNU Make?
问题的出现原因:
这个问题的出现是因为许多使用MSYS2的人仍然在询问如何在Windows上使用GNU Make。MSYS2是一个用于Windows的软件包管理器,它用于提供类似于Linux的开发环境。许多人对MSYS2感到满意,并开始使用它来替代CygWin。然而,他们可能需要使用GNU Make来构建和管理他们的项目,因此需要了解如何在Windows上使用GNU Make。
解决方法:
要在Windows上使用GNU Make,首先需要安装MSYS2。安装完毕后,打开MSYS2 shell,并输入以下命令来安装GNU Make:
# 更新软件包数据库和核心系统软件包 pacman -Syu # 如果需要,关闭shell并重新打开 # 再次更新 pacman -Su # 安装make pacman -S make # 测试(显示版本号) make -v
通过执行上述命令,就可以在Windows上安装GNU Make并进行测试。这样,用户就可以在MSYS2环境中使用GNU Make来构建和管理他们的项目了。
如何在Windows上使用GNU Make?
问题原因:
我使用的是GnuWin32项目中的GNU Make,可以在http://gnuwin32.sourceforge.net/找到,但是该项目已经有一段时间没有进行更新了,所以我对该项目的状态不确定。
解决方法:
1. 首先,确保您已经安装了GnuWin32项目中的GNU Make。您可以在http://gnuwin32.sourceforge.net/下载并安装最新版本。
2. 在Windows操作系统中,将GNU Make的安装路径添加到系统环境变量中,这样您就可以从任意位置运行GNU Make命令。
3. 打开命令提示符或PowerShell,并导航到您的项目目录。
4. 创建一个名为"Makefile"的文件,其中包含您的构建规则和命令。
5. 在命令提示符或PowerShell中,运行以下命令来执行GNU Make:
make
这样,您就可以在Windows上使用GNU Make进行项目的构建和自动化。请记住,虽然GnuWin32项目已经有一段时间没有更新了,但GNU Make仍然是一个强大且广泛使用的构建工具,可以帮助您简化和加速项目的构建过程。
问题:如何在Windows上使用GNU Make?
原因:
在目录C:\MinGW\bin
中有一个可执行文件mingw32-make.exe
,它是你要运行的make
程序。由于已将所需目录添加到系统路径中,因此可以使用关键字mingw32-make
运行程序make
,但这不是一个容易记住的关键字。
解决方法:
将文件名从mingw32-make.exe
重命名为make.exe
,这样可以使用关键字make
来运行程序make
。
可以通过以下方式进行重命名:
- 右键单击并重命名文件。
- 运行命令
copy c:\MinGW\bin\mingw32-make.exe c:\MinGW\bin\make.exe
。
结果:
现在,如果在命令提示符上键入make
,它应该输出类似以下内容:
make: *** No targets specified and no makefile found. Stop.
这表示程序make
已运行。
如果这还不够清楚:make程序分发在文件mingw32-make.exe
中。由于目录c:\MinGW\bin
位于系统路径上,因此您可以使用mingw32-make
作为命令,或者将mingw32-make.exe
复制(更安全的重命名方式)为make.exe
。
出于庞大的原因,您应该避免将msys或mingw作为环境变量的一部分,并且msys目录是本地目录。在msys中的路径将允许您使用mingw64的bin中的make,但不讨论此问题。同样不讨论该问题,您应该创建一个到mingw32-make.exe的硬链接,即make.exe,这样可以更轻松地进行操作而不必克隆exe。尝试:mklink /H C:\MinGW\bin\mingw32-make.exe C:\MinGW\bin\make.exe
重命名文件很容易,但在安装更新时也很容易忘记执行此操作。为了获取make的“别名”,可以使用doskey。由于Windows的向后兼容性,可以在C驱动器上创建autorun.bat文件,Windows会在每次启动cmd提示符时运行该文件(类似于linux中的.bashrc文件,但是系统范围)。在autorun.bat文件中,添加以下行:make=mingw32-make.exe $*
,这告诉Windows在您键入make时使用mingw32-make.exe,并将所有传递给make的参数附加到mingw32-make.exe上。