1. 目的
想在 Windows 下编译一些 C++ 工程, 依赖库没有提供 CMake 支持,手动编译则需要递归编译所有依赖库, 过程预计比较复杂容易失败, 考虑使用预编译库。由于 GnuWin32 系列的预编译库普遍版本较低, 无法满足原本要编译的 doxygen 工程中的需求, 考虑使用 msys2 提供的预编译库, 如 bison 和 flex, 版本都很新。
使用 msys2 意味着需要删除 git bash, 原因是 git for windows 是基于 msys2 的, 两者都装容易冲突。 安装 msys2 后可以用包管理工具 pacman
安装 git
.
2. msys2 环境 (Environment)
msys2 提供了不同的环境/子系统,使用 msys2 的第一件事是决定使用哪个环境/子系统。不同的 msys2 环境,差别在于:环境变量、默认的编译器和链接器、架构、系统库等。如果不确定, 那就用 UCRT64.
MSYS 环境包含了类 unix、基于 cygwin 的工具, 放在 /usr
目录, 并且是一直可以使用的。其他的环境则是在 MSYS 环境基础上增加内容得到的。
比如说, 在 UCRT64 环境中 $PATH
变量以 /ucrt64/bin:/usr/bin
开始, 意味着除了可以用 msys 系列的工具, 还可以使用所有基于 ucrt64 的工具。
切换不同的 msys 环境: 修改 MSYSTEM
环境变量即可(尝试了 export, 不过没生效);还有一种土方法,在开始菜单输入 MSYS2 然后选择需要的 Environment 对应的 shell:
关于GCC和LLVM/Clang
GCC 相关的测试比较充分,LLVM 的一大特点则是 ASan 支持(疑问:GCC 不带 ASan 吗?)。稳妥起见先用 GCC 的。
关于C RunTime library: MSVCRT vs UCRT
UCRT 比较新,可以当 MSVCRT 用。
3. 升级 MSYS2: 使用 pacman 滚动式升级整个系统
MSYS2 使用 pacman
作为包管理工具, 继承了 archlinux 下的滚动式升级特性。
更新所有包
pacman -Suy
包缓存目录
/var/cache/pacman/pkg
目录存放了缓存的包, 例如我的
可以定期手动删除包,减少硬盘占用。
4. 在 Windows Terminal 中增加显示 MSYS2
https://www.msys2.org/docs/terminals/
// This makes UCRT64 the default shell
"defaultProfile": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
"profiles": {
"list":
[
// ...
{
"guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
"name": "UCRT64 / MSYS2",
"commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64",
"startingDirectory": "C:/msys64/home/%USERNAME%",
"icon": "C:/msys64/ucrt64.ico",
"font":
{
"face": "Lucida Console",
"size": 9
}
},
{
"guid": "{71160544-14d8-4194-af25-d05feeac7233}",
"name": "MSYS / MSYS2",
"commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys",
"startingDirectory": "C:/msys64/home/%USERNAME%",
"icon": "C:/msys64/msys2.ico",
"font":
{
"face": "Lucida Console",
"size": 9
}
},
// ...
]
}
5. 使用 zsh
pacman -S zsh
继续修改 Windows 终端中的 json 文件,加入参数 -shell zsh
安装git
pacman -S git
安装git后,可以安装 oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
6. VSCode 中的配置
增加 MSYS2 终端
目的是在 VSCode 中按 Ctrl+J 时, 可以选择 MSYS2 终端, 就像 Git Bash 那样。
方法是 Ctrl + Shift + P 改 settings.json, 加入
"terminal.integrated.profiles.windows": {
"MSYS2 UCRT": {
"path": "cmd.exe",
"args": [
"/c",
"D:\\soft\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh"
]
}
}
explorer 右键使用 MSYS UCRT64 打开
保存如下内容为 msys2_ucrt64.reg
,注意检查和你的路径是否一致。双击运行。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\ucrt64]
@="UCRT64 Here"
"icon"="D:\\soft\\msys64\\ucrt64.ico"
[HKEY_CLASSES_ROOT\Directory\Background\shell\ucrt64\command]
@="D:\\soft\\msys64\\msys2_shell.cmd -here -no-start -ucrt64"
配置 git 路径
直接在 Settings.json 里加入 git.exe 的路径,会报错:
修改方法是在 git.exe 所在的 D:/soft/msys64/usr/bin/
目录, 创建 git-wrap.bat 文件,然后 settings.json 用这个wrapper:
7. 安装 C/C++ 依赖库
以 bison 和 flex 为例
pacman -S bison flex
安装 ag
注意要安装带 ucrt
的,这样才能在 MSYS2 UCRT 里用
pacman -S mingw-w64-ucrt-x86_64-ag
如下的,无法使用:文章来源:https://www.toymoban.com/news/detail-494546.html
pacman -S the_silver_searcher
查询 bison 和 flex 的安装目录
pacman -Ql bison | ag 'lib'
文章来源地址https://www.toymoban.com/news/detail-494546.html
8. References
- https://www.cnblogs.com/52fhy/p/15158765.html
- https://www.msys2.org/docs/
到了这里,关于Windows shell环境: 从git bash切换到msys2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!