189 8069 5689

记录一次Win下的C++环境搭建(VSCode+MinGW+Clangd+xmake)

这套环境是VSCode+MinGW(MSYS2)+Clangd+Xmake的配置。

创新互联建站从2013年创立,先为汾阳等服务建站,汾阳等地企业,进行企业商务咨询服务。为汾阳企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

MinGW

网上很多教程引导去的MinGW-w64 gcc版本只更新到了8.1.0就停更了,而实际中gcc版本已经到达12了,因此我们使用MSYS2去安装GCC。

首先使用scoop安装msys2(在main bucket中就有):

scoop install msys2

终端中输入msys2进入环境,下载minGW:

pacman -S mingw-w64-x86_64-toolchain

下面会提示选择哪些工具,如果不是硬盘空间实在有限的话,直接回车默认安装全部即可。

随后找到minGW的bin目录(这里推荐一手Listary,直接搜索g++.exe打开文件目录即可,非常方便),添加环境变量,此时GCC编译器就算是安装成功了。

clangd

这个是花费了我最多精力的地方,有一说一,clangd在代码提示补全上确实吊打vscode自带的C/C++扩展,但是在Windows上的配置费了一番功夫

在vscode扩展商店中搜索clangd下载,完成后右下角会弹窗提醒你安装clangd server,点击Install即可直接安装,这一点非常便捷,clangd默认直接绑定了VS路径下的MSVC库,如果需要修改为MinGW则要改动target。

配置如下:

{
    "clangd.arguments": [
        "--header-insertion=never",
        "--completion-style=detailed",
        "--query-driver=D:\\6-EnglishPathSoftwates\\ScoopUser\\apps\\msys2\\2022-06-03\\mingw64\\bin\\g++*"
    ],
    "clangd.fallbackFlags": [
        "-std=c++14",
        "-I${workspaceFolder}/src/includes",
        "--target=x86_64-w64-windows-gnu"
    ]
}

逐一解释:

  • header-insetion:是否自动引入头文件,这里设置的是从不。
  • completion-style:设置提示格式,这里设置的是展示所有细节。
  • query-driver:设置clangd server的驱动库路径,这里我设置了mingw的路径,但似乎没有效果(clangd仍然链接到了MSVC当中)
  • std:设置c++标准
  • -I:设置用户自定义的库路径
  • --target:设置链接目标,这里改成了GNU,即对应MinGW

学习C++ Primer这本书的需要注意一下,虽然全书是按照C++11标准写的,但是这里如果设置成C++11,clangd会书中的附带代码报错(比如Sales_item.h)。

xmake

这是前段时间发现的一个新的构建工具(也不算新了,好像已经release两年了),用的是lua脚本,在我学习C++Primer的过程中感觉比cmake更加简洁易懂,用它管理我写的习题集非常轻松。贴一段xmake的配置代码:

target("E632")
    set_kind("binary")
    add_files("src/chapter6/e632.cpp")

target("E633")
    set_kind("binary")
    add_files("src/chapter6/e633.cpp")

target("E642")
    set_kind("binary")
    add_files("src/chapter6/e642.cpp")

target("E644")
    set_kind("binary")
    add_files("src/chapter6/e644.cpp")

这款工具也可以在scoop中直接下载,vscode也提供了官方插件快速操作(不过我觉得命令行已经够傻白甜了),推荐大家使用。

同时它也可以根据lua脚本直接生成CmakeList文件(也就是向下兼容Cmake),这个功能我没有深入体验过,感兴趣的可以尝试一下。


分享题目:记录一次Win下的C++环境搭建(VSCode+MinGW+Clangd+xmake)
文章出自:http://jkwzsj.com/article/dsoijjj.html

其他资讯