win vscode C++ 环境搭建

vscode C++ 环境搭建

文章目录

  • vscode C++ 环境搭建
    • 1.安装mingw-w64
    • 2.安装C/C++插件
    • 3.使用make命令来进行编译
    • 4.可选插件
    • 5.总结


1.安装mingw-w64

  • 下载mingw-w64、安装、配置环境变量
    • 注:认准mingw-w64
  • powershell or cmd,键入命令gcc -v,若显示版本号,那就成功啦

2.安装C/C++插件

  • 需要配置 3 个文件,阅读以下文件中的注释

    • c_cpp_properties.json
    • tasks.json
    • launch.json
  • c_cpp_properties.json

    设置头文件、编译器的目录。

    • 注:此文件不允许注释,记得删除

      {
          "configurations": [
              {
                  "name": "Win32",
                  "includePath": [                                  //includePath 头文件目录
                      "${workspaceFolder}",
                      "S:/Env/LLVM/include",
                      "S:/Env/LLVM/lib/gcc/x86_64-w64-mingw32/8.1.0/include",
                      "S:/Env/openGL/include"
      
                  ],
                  "defines": [
                      "_DEBUG",
                      "UNICODE",
                      "_UNICODE"
                  ],
                  "compilerPath": "S:/Env/LLVM/bin/gcc.exe",         //user\mingw\bin\gcc.exe 需要自己配置
                  "cStandard": "c11",
                  "cppStandard": "c++17",
                  "intelliSenseMode": "clang-x64",
                  "browse": {                                        //includePath 头文件目录
                      "path": [
                          "${workspaceFolder}",
                          "S:/Env/LLVM/include",
                          "S:/Env/LLVM/lib/gcc/x86_64-w64-mingw32/8.1.0/include",
                          "S:/Env/openGL/include"
                      ],
                      "limitSymbolsToIncludedHeaders": true,
                      "databaseFilename": ""
                  }
              }
          ],
          "version": 4
      }
  • tasks.json

    配置编译命令。
    这里提供两个版本。g++ build 和 g++ make

    • g++ build 只能编译单cpp文件(可以后面自己扩展)

    • g++ make 会配合 makefile 使用,后面再谈

      {
          // See https://go.microsoft.com/fwlink/?LinkId=733558
          // for the documentation about the tasks.json format
          "version": "2.0.0",
          "tasks": [
              {
                  "label": "g++ build",
                  "type": "shell",
                  "command": "g++",               //g++命令
                  "args": [
                      "-g",                       //debug
                      "${file}",                  //需要编译的文件
                      "-o",                       //输出
                      "${fileDirname}\\main.exe"  //输出程序的绝对路径
                                                  //注:launch文件中的 "program": "${fileDirname}\\main.exe"路径 要与 此路径对应
                  ],                              //否则无法调试
                  "group": {
                      "kind": "build",
                      "isDefault": true
                  },
                  // "problemMatcher": [          //C/C++插件提供的problemMatcher,文件路径有问题,会出现找不到文件的错误
                  //     "$gcc"
                  // ]
                  "problemMatcher": {             //自己编写的,正常运行
                      "owner": "cpp",
                      "fileLocation": [
                          "relative",
                          "\\"
                      ],
                      "pattern": {
                          "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                          "file": 1,
                          "line": 2,
                          "column": 3,
                          "severity": 4,
                          "message": 5
                      }
                  }
              },
              {
                  "label": "g++ make",
                  "type": "shell",
                  "command": "make",
                  "args": [],
                  // "problemMatcher": [
                  //     "$gcc"
                  // ]
                  "problemMatcher": {
                      "owner": "cpp",
                      "fileLocation": [
                          "relative",
                          "\\"
                      ],
                      "pattern": {
                          "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                          "file": 1,
                          "line": 2,
                          "column": 3,
                          "severity": 4,
                          "message": 5
                      }
                  }
              }
          ]
      }
  • launch.json

    调试所用到的配置文件

    {
        // 使用 IntelliSense 了解相关属性。
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "(gdb) Launch",
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}\\main.exe",              //需要调试的程序的路径
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "S:\\Env\\LLVM\\bin\\gdb.exe",    //user\mingw\bin\gdb.exe  需要自己配置
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                // "preLaunchTask": "g++ make"                       //调试前调用的task,名称对应 task 中的 label
                "preLaunchTask": "g++ build"
            }
        ]
    }

3.使用make命令来进行编译

  • MakeFile

    make命令必须要一个makefile,而makefile中则要编写一个“规则”,按照此规则进行编译。

    CXX		  := g++
    CXX_FLAGS := -g -std=c++17 # -Wextra -static-libgcc -Wall
    
    #   makefile文件所在的目录/SRC/*.cpp ,即相对路径
    SRC		:= 04_stl/02_list
    #   外部库头文件
    INCLUDE	:= #S:/Env/openGL/include
    #   头文件对应的库
    LIB		:= #S:/Env/openGL/libs
    #   需要连接的外部库,在 LIB 中查找
    LIBRARIES	:= #-lglad -lglfw3 -lglfw3dll
    #   生成可执行文件的名称
    EXECUTABLE	:= main
    
    all: ./$(SRC)/$(EXECUTABLE)
    
    run: all
        ./$(SRC)/$(EXECUTABLE)
    
    $(SRC)/$(EXECUTABLE): $(SRC)/*.cpp #$(SRC)/*.c
        $(CXX) $(CXX_FLAGS) -I$(INCLUDE) -L$(LIB) $^ -o $@ $(LIBRARIES)
    
    #  注:目录后面不要有多余的空格
    #  CXX CXX_FLAGS 都是一些定义,怎样使用?   $(CXX) $(CXX_FLAGS)
    #  $@ 代表 $(SRC)/$(EXECUTABLE),即冒号左边;$^ 代表 $(SRC)/*.cpp。即冒号右边
    #  -g  -I   -L   -o  等命令不做过多解释了,想了解更多命令的话,查阅GCC命令手册
    
  • make

    当我们写好makefile后,通过powershell或者cmd,跳转到makefile所在目录下,输入make命令,便能直接生成可执行文件了。输入make run则能生成并执行程序。

    • 注:可能有些版本的mingw,不叫 make.exe,叫做 mingw32-make.exe。改个名字即可。
  • 通过launch调用make命令进行编译

    更改launch文件 “preLaunchTask” 为 “g++ make”

    • 注:makefile中的可执行程序的输出目录 要与 launch中的 “program”: “${fileDirname}\main.exe” 相对应。不然gdb就找不到需要的程序进行调试。
  • 关于项目结构的更多信息 可以参考C/C++ Project Generator插件。

4.可选插件

  • Include Autocomplete:对C/C++进行补充。

  • C/C++ Clang Command Adapter :需要额外安装Clang。

  • C++ Intellinsense:查找所有引用。需要安装GNU Global。安装 version >= 6.5 的版本。

    将压缩包中的bin 、lib 、share 等文件夹 解压到 mingw 合并即可。这样就直接使用mingw的环境变量,不用再配置环境变量了。

    在工程目录下输入gtags,就能使用啦。记住,在修改完代码后需要重新在源码工程目录下键入“gtags”命令来重新建立Tags。

    链接:http://adoxa.altervista.org/global/ ,可能需要V-P-N。

    • 注:能用,但效果不太好, 且繁琐。

5.总结

    更新到现在,官方C/C++插件才0.20.1版本。C#插件都1.16.2了。吃瓜。
    vscode不太适合用来学习C++,配置繁琐,IntelliSense 等效果远不如IDE。但期待vscode会变得更好吧,虽然它只是个编辑器。

你可能感兴趣的:(C++)