星夜的蓝天

windows下基于MinGW的C++环境(包含GCC和LLVM)的配置
前言 从以前开始陆陆续续也装过了不下10次的MinGW,这其中给我的感受就是麻烦,无论是安装下载器下载库文件,还是...
扫描右侧二维码阅读全文
17
2020/10

windows下基于MinGW的C++环境(包含GCC和LLVM)的配置

前言

从以前开始陆陆续续也装过了不下10次的MinGW,这其中给我的感受就是麻烦,无论是安装下载器下载库文件,还是整体下载,轻则版本过低体会不到新特性,重则不兼容,再尝试了如下几个版本后:

- MinGW
- MinGW-W64
- TDM-GCC
- 纯MinGW+LLVM(需要自编译)
- MSYS2

我总在想为什么没有一个完整的包是可以直接解压后加入PATH就可以配置好环境的简单版本,直到后来,我意外发现了winlibs这个项目。

安装

这步非常的简单,去http://winlibs.com/ 找到“Download”,在“Release versions”中找到最新的版本,下载对应系统版本的压缩包即可,7-zip格式会有更小的体积,但需要使用7-zip解压。

下载完成后把下载后的安装包解压到任意地方,然后会有如下目录

.
|-- bin
|-- include
|-- lib
|-- libexec
|-- share
|-- version_info.txt
`-- x86_64-w64-mingw32

6 directories, 1 file

将bin目录加入path即可,关于如何把某个目录加入path,请善用搜索引擎。

配置

这时候,随便打开一个命令行(cmd,powershell),输入gcc --version,应该就有反应出来了,如果输出了版本号,就代表配置成功了,例:

gcc.exe (MinGW-W64 x86_64-posix-seh, built by Brecht Sanders) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

配置vscode开发环境

新版vscode 中,在按照上述步骤配置好MinGW环境后,安装C++套件时是可以自动检测到环境的了,这里简单提一下单文件运行神插件“Code Runner”,在安装好这个插件后,如果vscode的默认终端使用的是CMD,则可以不用管,但如果默认终端选择的是powershell,由于powershell语法规则的问题,在写好的代码上右键运行时可能会遇到

XXX.exe: The term 'XXX.exe' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Suggestion [3,General]: The command work.exe was not found, but does exist in the current location. PowerShell does not load commands from the current location by default. If you trust this command, instead type: ".\work.exe". See "get-help about_Command_Precedence" for more details.

这种情况下,有两种解决办法,

  1. 把默认终端换回CMD(如果只有这种办法我就不需要说这么多了)

  2. 更改CodeRunner中的executorMap设置项,自定义“cpp”文件的命令,在结尾执行编译出来的程序的程序名前面加上./
"code-runner.executorMap": {
        "c": "cd $dir && gcc $fileName -o \"$fileNameWithoutExt.exe\" -finput-charset=UTF-8 -fexec-charset=GBK -std=c11 -g&& ./$fileNameWithoutExt.exe",
        "cpp": "cd $dir && g++ $fileName  -o \"$fileNameWithoutExt.exe\" -g -finput-charset=UTF-8 -fexec-charset=GBK -std=c++11 -static && ./$fileNameWithoutExt.exe",
    },

建议在Code Runner的设置中打开Run In Terminal选项,方便在集成终端中进行程序的输入输出。

关于vscode的C++完整编译和调试环境

这部分参考vscode的docs中的c++部分即可,https://code.visualstudio.com/docs/cpp/config-mingw,我们已经安装了MinGW,因此官方教程中安装的那部分可以跳过了,从”Create Hello World“开始看即可。

挑几个重要部分讲:(切记,在编写任何程序之前,你必须先在vscode中打开一个文件夹(文件->打开文件夹),后文默认你都在某个文件夹下进行

Build helloworld.cpp

这部分介绍的是如何创建编译指令,vscode的编译指令文件名为task.json,对于C和C++,我们选择“终端“->”配置默认生成任务“,然后系统会帮我们自动生成一个task.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C/C++: g++.exe build active file",
      "command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
      "args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe"],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

通常我们只需要修改"command",让当中的路径是我们之前解压缩的文件目录下的“bin”文件夹下的"g++.exe"的路径即可,其他的设置不怎么需要改,这里有一个小坑,建议vscode打开的文件夹目录路径不要有中文名,否则以后可能出现一些奇怪的bug

设置好后,我们新建一个hello.cpp,随便写一个输出hello world的代码,然后按Ctrl+Shift+B编译,正常情况下,vscode会实时监测我们代码中的错误,当vscode实时监测有延迟的时候,可以选择按Ctrl+Shift+B,这样vscode可以从编译信息中检测到我们代码的信息。

当然,vscode也支持多文件编译,尤其适合在工程项目中使用,但我们更介意工程项目使用VS或者cmake,但毕竟用vscode写多文件工程项目的前提是你得对vscode有足够的使用经历,不是吗?

调试 Debug

如果不知道调试是什么的同学可以跳过这部分……

在确保程序可以编译的情况下(参照上文),在主菜单中的“运行”>"添加配置",然后选择C++ (GDB/LLDB),你会看到vscode提示了几个配置文件,选择第一个g++的即可

你会看到如下配置:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "g++.exe - Build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "C/C++: g++.exe build active file"
    }
  ]
}

同样的,我们只需要修改几个地方,首先是“miDebuggerPath”,修改为“之前你解压的那个目录/bin/gdb.exe""preLaunchTask"确保与之前task.json中的"label"相同,根据个人喜好,"cwd"可以修改为"${fileDirname}",然后编写完程序后按F5便可开始调试。

后话

本文只是官方介绍文档的一小部分,满足基本编程需求,对于想要了解更多的,可以参考官方的教程,如果能翻越英语的障碍(google translate),那么你对vscode 的了解还是可以深入很多的,并且可以自己挖掘出许多新的功能。

最后修改:2020 年 10 月 17 日 11 : 55 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论

召唤看板娘