VSCode使用mingw编译C/C++程序

VSCode使用mingw编译C/C++程序

通常我们使用MSVC(cl.exe)编译C/C++源代码程序,运行在Windows上,此外我们还可以使用mingw提供的GCC+GDB编译C/C++源代码,生成原生的Win32程序,运行在Windows平台上。本文参考下面的文档实践:在Windows x64平台上,用VSCode开发C/C++程序,用GCC编译器编译成Win32的exe,运行在Windows上。

Using GCC with MinGW

1. VSCode安装(略)

2. MinGW-w64 - for 32 and 64 bit Windows 下载安装

mingw(Minimalist GNU for Windows): A complete runtime environment for gcc.
mingw是一个适用于微软windows应用程序的极简开发环境。MinGW提供了一个完整的开源编程工具集,适用于原生MS-Windows应用程序的开发,并且不依赖于任何第三方C运行时DLL。MinGW主要供在MS-Windows平台上工作的开发人员使用,但也可跨平台使用。

mingw-w64-install.exe

这个是很小的安装程序,下载之后运行安装,安装目录位于:

C:\DEVPACK\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0

如果你不想使用在线安装程序(MinGW-W64 Online Installer),可以直接下载一个 x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z 包,这样解压之后就相当于安装成功(稍微配置一下环境变量)。

x86_64-win32-seh

环境变量配置如下:

MINGW_HOME=%DEVPACK_HOME%\mingw-w64\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\mingw64
Path=(原有的配置);%MINGW_HOME%\bin

然后打开命令行窗口测试:

g++ --version
gdb --version

3. 创建 MinGW-w64 C/C++项目

  • 打开命令行窗口,定位到项目父目录 Projects:

    cd C:\Users\yourname\Projects
    mkdir helloworld
    cd helloworld
    code .
    
  • 然后创建 helloworld 目录下面的文件 hello.c

    #include 
    
    int main(int argc, const char *argv[])
    {
        printf("hello mingw.\n");
        return 0;
    }
    
  • 然后创建 helloworld/.vscode/ 下面的文件:

    双击打开 hello.c。按下组合键 Ctrl+Shift+B 编译,由于第一次没有 tasks.json,所以顶部工具条提示:Select the build task to run,选中:
    C/C++: gcc.exe build active file

    程序可以正常编译运行。生成编译配置文件:tasks.json (Terminal->Configure Default Build Task->gcc.exe build active file)。

  • 修改后完整的 tasks.json 内容如下:

    {
       "version": "2.0.0",
       "tasks": [
           {
               "type": "shell",
               "label": "mingw-gcc-build",
               "command": "${env:MINGW_HOME}\\bin\\gcc.exe",
               "args": [
                   "-g",
                   "${file}",
                   "-o",
                   "${fileDirname}\\${fileBasenameNoExtension}.exe"
               ],
               "options": {
                   "cwd": "${env:MINGW_HOME}\\bin"
               },
               "problemMatcher": [
                   "$gcc"
               ],
               "group": {
                   "kind": "build",
                   "isDefault": true
               }
           }
       ]
    }
    

    我新增加了一个标签,“mingw-gcc-build”,去掉了绝对目录,采用系统环境变量${env:MINGW_HOME},这样项目可移动性更强。VSCode中预定了一些变量,可以在配置任务脚本时使用。以 C:/Users/zhang/Projects/helloworld/.vscode/tasks.json 脚本为例,介绍各个变量的含义。如下:

    ${workspaceFolder}
    表示当前workspace文件夹路径:C:/Users/zhang/Projects/helloworld

    ${workspaceRootFolderName}
    表示workspace的文件夹名:helloworld

    ${file}
    文件自身的绝对路径:C:/Users/zhang/Projects/helloworld/.vscode/tasks.json

    ${relativeFile}
    文件在workspace中的路径:.vscode/tasks.json

    ${fileBasenameNoExtension}
    当前文件的文件名(无后缀名):tasks

    ${fileBasename}
    当前文件的文件名:tasks.json

    ${fileDirname}
    文件所在的文件夹路径:C:/Users/zhang/Projects/helloworld/.vscode

    ${fileExtname}
    文件名的后缀名:.json

    ${lineNumber}
    当前文件光标所在的行号

    ${env:MINGW_HOME}
    系统中的环境变量:C:\DEVPACK\mingw-w64\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\mingw64

4. 调试 MinGW-w64 C/C++项目

  • 创建 launch.json

    VSCode菜单:Debug > Add Configuration…> C++ (GDB/LLDB)
    或者按F5,选择C++ (GDB/LLDB)

  • 修改后完整的launch.json内容:

    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "mingw-gcc-debug-file",
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": true,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "${env:MINGW_HOME}\\bin\\gdb.exe",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask": "mingw-gcc-build"
            }
        ]
    }
    

    调试过程中,可能会报错误,选是(Y)下载 ndp48-web.exe,然后双击 ndp48-web.exe,安装 Microsoft .NET Framework 4.8 就可以。
    VSCode使用mingw编译C/C++程序_第1张图片

5. C/C++项目属性设定

  • 创建 c_cpp_properties.json

按下组合键 Ctrl+Shift+P,C/C++Edit Configurations (JSON)。

  • 修改后的 c_cpp_properties.json

    {
        "configurations": [
            {
                "name": "mingw",
                "includePath": [
                    "${workspaceFolder}/**",
                    "${env:MINGW_HOME}/x86_64-w64-mingw32/include/**"
                ],
                "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
                "compilerPath": "${env:MINGW_HOME}\\bin\\gcc.exe",
                "cStandard": "c11",
                "cppStandard": "c++17",
                "intelliSenseMode": "clang-x86"
            }
        ],
        "version": 4
    }
    

你可能感兴趣的:(VSCode,c,c++)