以前在装MINGW32时发现了一个新功能叫msys。其主要目的就是在windows下模拟一套POSIX环境,以方便我们自动化编译一些开源软件。果不其然我用这套工具成功地在windows下编译了gsl。
这里要注意的是msys和cygwin的区别,用msys+mingw开发的是原生的windows程序,不需要模拟POSIX接口,因此运行速度更快,兼容性更差。你甚至可以直接调用windowsAPI的各种函数(当然这样可移植性就没有了)。MINGW的工作是编译,而msys的工作只是简单提供一个bash环境使得我们可以像在linux下(./configure,make,make install)三步搞定一个开源软件的编译工作。
当然msys的第一代有个很大的缺点,它无法解决我们编译各种软件时的依赖问题,因此很多时候由于缺少某个库的支持,我们无法configure成功。而且mingw32只能编译32位程序,并停留在了4.8.1这个版本上一直都没有升级。
于是我转移到了mingw64平台上,这个项目的社区目前要活跃得多,至少已经和本家的gcc一起同步到了4.9.2。而配合这个mingw64的自动化仿POSIX环境就是MSYS2。
MSYS2本身是用cygwin驱动的但它直接使用MINGW64来开发,所以编译出的程序是原生windows程序。我们可以直接从source force上下到
msys2:
http://sourceforge.net/projects/msys2/
mingw64:
http://sourceforge.net/projects/mingw-w64/
下载后,吧它们安装到同一个文件夹下(比如C:\MSYS2)就可以工作了,注意安装mingw64时平台要选x86_64而不i686,这样你才能得到64位程序的编译能力,但这同时也意味着你的库是64位的,所以想要要同时开发32位和64位程序的话,就需要装两次了,一次选x86_64,一次选i686。
MSYS2中引入了Arch Linux中的pacman包管理器,解决了我们安装软件时令人头疼的库依赖问题,在MSYS2的安装目录中找到批处理文件mingw64_shell.bat,就可以进入msys2环境了,你可以把\usr\bin和\mingw64\bin这两个目录加到path中去,这样你在windows自己的命令行中也可以使用这些工具了。
首先我们输入命令pacman -Syu对系统进行全面更新,如果以后你装了一些新的包,这个命令也会帮你把你装的包一起更新。如果嫌国外的服务器网速太慢可以把中科大的镜像添加到pacman的mirrorlist文件中,具体方法参见https://lug.ustc.edu.cn/wiki/mirrors/help/msys2。不过这个镜像的文件可能有些不全,但我感觉source force的速度还是可以的,所以当中科大镜像没文件,它自己的ftp连不上,最后就会连上source force。
你可以输入pacman -Sl查看可以安装的包,用pacman -Ss来模糊搜索,pacman -Q来列出已经安装的包,各种命令都可以用pacman -h获得帮助:
$ pacman -h
用法: pacman <操作> [...]
操作:
pacman {-h --help}
pacman {-V --version}
pacman {-D --database} <选项> <软件包>
pacman {-Q --query} [选项] [软件包]
pacman {-R --remove} [选项] <软件包>
pacman {-S --sync} [选项] [软件包]
pacman {-T --deptest} [选项] [软件包]
pacman {-U --upgrade} [选项] <文件>
使用 'pacman {-h --help}' 及某个操作以查看可用选项
如果要安装包,用pacman -S 包名即可,所有的包名在pacman -Sl中会显示出来,个人建议安装的几个包是:git,man,make,mingw-w64-x86_64-boost,mingw-w64-x86_64-gsl。注意工具可以装msys的但库或者脚本语言请务必装mingw-w64-x86_64的,因为这不但更全而且执行效率也好得多。
如果装包遇到文件冲突(应为我们事先装好的mingw64,pacman是不知道的),可以用--force选项来强制安装。这里不建议用pacman直接装mingw-w64-x86_64-gcc因为工具组不全会在windows下无法运行,而且它还会装上一个Python2,这对我们这些Python3党来说是很不好受的一件事。
当然你可以直接安装mingw-w64-x86_64-python3包,不过我还是更习惯直接用python官方的windows版吧,不过这里有个好处就是它可以帮你装上最新的scipy而不需要到Scipy的官网上慢速地拖安装包。输入pacman -S mingw-w64-x86_64-python3-scipy就可以了,同时它帮你也解决了numpy的依赖问题。
如果需要更新包用pacman -Sy,这个命令同样可以用直接装包。
由于Qt官方没有提供Mingw64的版本,它只有VC和mingw32的版本,所以装mingw64的qt目前用msys2是最简单的方法,你输入pacman -S mingw-w64-x86_64-qt5就可以了。然后到Qt官网去下载一个Qtcreator,自己配置一下编译系统,在菜单栏的工具-选项-构建和运行以及版本控制中去设置就好了。需要填入的文件包括qmake,g++,gdb,git,它们在\mingw64\bin和\usr\bin这两个文件夹中可以找到。
最后讲一下在任务栏创建一个快捷方式的方法,你可以直接在\usr\bin中找到mintty.exe它是一个功能更好的windows下的终端,把它拖到任务栏固定好,注意默认的字体太小,在option-text中调整一下,建议使用consolas 16号字体。然后右键点击任务栏快捷方式再右键Terminal,左键属性,把目标改成:
(……\usr\bin\mintty.exe 这块不要动直接加后面的参数)-i /msys2.ico env MSYSTEM=MINGW64 bash -l -i
然后你就可以在任务栏直接快速启动msys2终端了。