MinGW开发环境搭建

类MinGW环境有哪些

  1. MinGW:是Minimalist GNU for Windows的缩写,是让windows开发者可以使用GNU工具链和一些类库,同时也支持win32的api,它编译出来的程序不一定是跨平台的。它有MinGW32和MinGW64两个版本,对应开发32位和64位程序。为了更方便的使用MinGW,就产生了一个叫MSys工具,是一个类Unix命令行环境。由于MSys开发太慢,又搞了MSys2工具,同时还解决了包管理问题,方法是继承了Arch Linux的包管理系统pacman。

  2. Cygwin:是提供了完整的类Unix环境,是让windows开发者在开发软件的时候,感觉是在Unix环境下。用它开发出来的程序既可以运行在windows也可以用在unix,但需要重新编译。在windows上运行的时候依赖cygwin1.dll库,它提供了在windows上posix接口。

安装MinGW环境

  1. 先安装MSys2,下载地址为http://sourceforge.net/projects/msys2,安装的时候路径不要有空格。

  2. 安装过程很简单,根据提示安装即可

  3. 安装完后,需要用包管理工具更新系统,首先了解下pacman的命令

常用命令:如下。更多命令)

1
2
3
4
5
6
7
8
9
10
11
12
pacman -S package_name  #安装软件包
pacman -R package_name #删除软件包
pacman -Rs package_name #顺便删除软件包相关依赖
pacman -Syu #升级系统中的所有包
pacman -Ss package #查询软件包
pacman -Qs package #查询已安装的包
pacman -Qi package #显示查找的包的信息
pacman -Ql package #显示你要找的包的文件都安装的位置
pacman -Sw package #下载但不安装包
pacman -U /path/package.pkg.tar.gz #安装本地包
pacman -Scc #清理包缓存,下载的包会在/var/cache 这个目录
pacman -Sf pacman #重新安装包

更新过程:运行msys2_shell.bat,启动MSys2命令行窗口

1
2
3
4
5
6
# 升级系统中的所有包
pacman -Syu
# 更新核心包,更新完后执行autorebase.bat
pacman -S --needed filesystem msys2-runtime bash libreadline libiconv libarchive libgpgme libcurl pacman ncurses libintl
# 再次启动msys2_shell.bat,用以下命令确认是否为最新
pacman -Syu

如果更新太慢,把软件源换到国内,修改/etc/pacman.d/中有三个mirrorlist文件,分别为mingw32,mingw64以及msys的源,具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
##
## MSYS2 repository mirrorlist
##
## Primary
## msys2.org
## 中国科学技术大学开源软件镜像
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/

##
## 32-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
## 中国科学技术大学开源软件镜像
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/i686
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/

##
## 64-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
## 中国科学技术大学开源软件镜像
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
  1. 查看软件包:

MSys2包含了哪些软件包:https://github.com/Alexpux/MSYS2-packages

MinGW-64包含了哪些软件包:https://github.com/Alexpux/MINGW-packages

  1. 安装一些必要的软件包,看个人需要。另外因为我用的是64位系统,且编译的程序也是64位的,所以尽量安装mingw-w64的包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pacman -S autoconf
pacman -S autogen
pacman -S automake
pacman -S vim
pacman -S tar
pacman -S zip
pacman -S unzip
pacman -S mingw-w64-x86_64-pkg-config
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw64/mingw-w64-x86_64-cmake
# 在mingw64/bin目录下,执行cp mingw32-make.exe make.exe
pacman -S mingw64/mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-luajit
pacman -S mingw-w64-x86_64-doxygen
pacman -S mingw-w64-x86_64-graphviz
# qt包有1g多,看需要安装,这里安装主要是让cmake支持cmake-gui
pacman -S mingw-w64-x86_64-qt5

使用MinGW环境

  1. 尽量使用MinGW工具,而不安装windows工具。如

    • cmake
    • make
    • lua/luajit
    • doxygen
    • graphviz
  2. Git是例外,因为在git目录下,使用自己安装的MinGW显示Git状态速度特别慢,而用Git自带的MinGW则非常快。测试函数如下

1
2
3
4
# 这两个是跟显示Git状态相关的脚步,具体内容google
# curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
# curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -o ~/.git-prompt.sh
time __git_ps1
  1. 所以一般情况下,不用自己安装的MinGW,而是使用Git自带的MinGW。这样一来,又解决另外一个问题
    • 命令行工具问题,原因是
      • windows的cmd不是很好用
      • 像cmder的工具总是有这样那样的bug
      • 工具链够全,且容易扩展,在windows的PATH中添加“C:\msys64\mingw64\bin”目录
  1. 需要包管理的时候,还是使用msys2_shell.bat,但建议使用快捷方式,加以下参数
1
2
3
4
5
-use-full-path  # 使用windows的PATH全路径
-mingw64 # 使用mingw64
#mingw32 : 优先使用 msys64/mingw32 下的工具;
#mingw64 : 优先使用 msys64/mingw64 下的工具;
#msys2 : 两个都不使用,只用自身 msys 的工具;
  1. 改进Git自带的MinGW,看着更加舒适些。它是使用mintty作为终端模拟的,在“~目录”下加“.minttyrc”文件,内容如下
1
2
3
4
5
6
7
8
9
10
BoldAsFont=-1
CursorColour=0,255,64
CursorType=block
Font=Consolas
FontHeight=12
Locale=zh_CN
Charset=UTF-8
Columns=120
Rows=30
Term=xterm-256color