Visual Studio Code 配置 C/C++ 环境详解

文章目录

    • 背景
    • 先决条件
    • 准备
      • Windows
      • MacOS
    • 配置
      • 开发配置
        • 用户区
        • 工作区
      • 编译配置
        • Launch
        • Tasks
          • 单文件结构
          • 多文件结构
    • 引申内容
      • Visual Studio
      • 包管理器

背景

撰写本教程主要具有以下几个动机:

  • 记录自己的所学
  • 已有资源不贴合实战

目前,网上能找到的教程通篇都是教如何配置 tasks.jsonlaunch.json 及安装扩展之类的,它可以很好的让你开始 Hello World!,但是,离实战还有些欠缺,例如:多文件架构

先决条件

在学习本教程之前,请确保你已满足以下要求:

  • 已安装 Visual Studio Code
  • 已安装 C/C++ 扩展

提醒: 文中标记的超链接均是指向与内容相关的链接,如果想要深入了解可以点击链接获取更详细的信息

准备

编译与调试 C/C++ 时需要借助 GNU 的一些软件,例如:gcc、g++、gdb

Windows

如果你的系统上已经安装了 Visual Studio 可以阅读下文末的 引申内容,在 Windows 操作系统下想使用 GNU 的软件,通常有以下两个途径:

  1. MinGW
  2. Cygwin

两者主要的区别是 Cygwin 提供了 POSIX 运行时环境。本文,主要以 MinGW 为例,如果对 Cygwin 感兴趣的同学,可以深入了解下。

首先,在 MinGW 下载页面,下载 mingw-get-setup.exe,这是 MinGW 提供的图形界面安装程序。

在安装 mingw-get-setup.exe 时,不要把程序安装在带空格的路径中,安装完成后,打开程序会看到以下界面:

Visual Studio Code 配置 C/C++ 环境详解_第1张图片
安装软件的方式:

  1. 在图形界面软件包列表框内勾选需要安装的包,然后在菜单栏点击 “Installation” 并选中 “Apply Changes”

  2. 【推荐】使用命令行界面安装程序

    # 安装 gcc
     mingw-get install gcc
     
    # 卸载 gcc
    mingw-get remove gcc
    
    # 获取已安装的软件
    mingw-get list
    
    # 获取命令帮助
    mingw-get help
    

你也可以通过,MinGW 快速开始 文档获取一些提示。现在,我们使用命令行来安装编译和调试软件:

 mingw-get install gcc g++ gdb

mingw-get 命令不存在?

请添加环境变量,例如:C:\MinGW\bin 添加至系统的 PATH 环境变量内

MacOS

已经自带一些 GNU 软件,所以可以跳过本步骤

配置

在讲解配置之前,我们先回顾下之前的内容,之前的内容主要给我们透露了以下信息:

  1. C/C++ 扩展主要用于提供代码提示
  2. GNU 软件主要负责编译代码,例如:Debug、发布等

所以,配置类型可以分为 开发配置编译配置 两类

开发配置

开发配置,主要是围绕着 C/C++ 扩展去做,主要用于头文件提示之类的。
【建议】 将此配置存放在用户区,而不是工作区,这样可以一处配置到处可用。

用户区

用户区配置,也可以称为全局性配置,这样可以做到一处配置到处可用。配置打开步骤:扩展 => C/C++ => 设置图标 => 点击用户区 => 找到带 在 settings.json 中编辑 的选项,并点击 在 settings.json 中编辑

{
	...
  "C_Cpp.default.cStandard": "c11",		// C 语言标准
  "C_Cpp.default.cppStandard": "c++11",	// C++ 语言标准
  "C_Cpp.default.includePath": [	// 【非递归型】将在给定目录里查找头文件
  ],
  "C_Cpp.default.browse.path": [	// 【递归型】将在给定目录里查找头文件
  	
  ]
}

大多数情况下,我只配置上面几个选项,对于头文件查找会使用 C_Cpp.default.browse.path 来配置,而不会使用 C_Cpp.default.includePath

工作区

.vscode 文件夹下新建一个 c_cpp_properties.json 文件

{		
  "configurations": [
    {
      "name": "win32",  // 平台名称。参考:Nodejs process.platform
      "browse": {
        "path": [
          "${default}"	// 引用默认配置。继承自用户区的 C_Cpp.default.browse.path 选项
        ]
      }
    }
  ]
}

通过 Visual Studio Code 进行配置时可以将鼠标悬浮在键上获得提示信息,也可以参考 C/C++ 扩展设置 来获得更详细的内容。

编译配置

编译配置,通常围绕着 GNU 软件去做,主要用于调试。Visual Studio Code 调试 C/C++ 相关的配置有两个:

  1. Launch 调试模块:用于启动调试
  2. Tasks 任务模块:用于编译代码
Launch

Visual Studio Code 内置了两种调试模块,分别是 Launch & Attach,对于 C/C++ 则选用 Launch (启动型) 配置。另外,你还可以参阅 Visual Studio Code 的内置变量 和 C++ Debug 获得更多提示信息。

Launch 模块的配置:

  • 用户区:将配置写在 launch 键下
  • 工作区:在 .vscode 文件夹下,新建 launch.json

tips: 将配置放在用户区时,请将 tasks 也放置在用户区,否则将找不到任务

建议: 将此配置放在用户区配置中
注意: 下面演示代码,均在用户区配置文件中完成。如果要了解配置的具体选项,可以通过编辑器代码提示获得提示信息或者参考 Launch.json 和 C/C++ Launch.json

{
  ...
  "launch": {
    "version": "0.2.0",
    "configurations": [
      {
        "name": "C++", //【必须】调试运行名称,自定义
        "type": "cppdbg", //【必须】指定调试器类型。
        "request": "launch", //【必须】请求类型
        "program": "${workspaceFolder}/debug/${fileBasenameNoExtension}.exe", //【必须】。要调试的文件。对应 tasks.json 中的输出结果
        "cwd": "${workspaceFolder}", //【可选】目标的工作目录
        "MIMode": "gdb", //【可选】指示 VS Code 链接到的调试器
        "miDebuggerPath": "gdb", //【必须】如果没有配置 PATH 变量,请写绝对路径
        "externalConsole": true, //【可选】是否使用外部终端调试程序
        "preLaunchTask": "Build C/C++ Project", //【必须】调试会话前启动的任务,用来编译代码。对应 tasks.json 中的 label
        "setupCommands": [ //【可选】传递给 gdb 的命令
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          }
        ]
      }  
	]
  }
}
Tasks

Tasks 模块的配置:

  • 用户区:【无代码提示】将配置写在 tasks 键下
  • 工作区:在 .vscode 文件夹下,新建 tasks.json

tips: 工作区配置不会覆盖用户区配置

单文件结构

单文件结构的项目,适用于标准库的代码编写,如果想要引用第三方库就不合适了,因为涉及到链接等问题。另外,你还可以参阅 Visual Studio Code 的内置变量 和 GCC 命令选项 获得更多提示信息。

tips: g++ 属于 gcc,是专门用来编译 c++ 代码的编译器

 {
 	...,
    "tasks": {
	  "version": "2.0.0",
	   "tasks": [
	     {
		   "label": "Build C/C++ Project", //【必须】任务名称。对应 launch.json 中的 preLaunchTask
	       "type": "shell",
	       "command": "g++",
	       "args": [// g++ 命令选项
		     "-g", //【必须】在可执行程序中包含标准调试信息
		     "-o",
	         "${workspaceFolder}/debug/${fileBasenameNoExtension}.exe", //【必须】输出文件。对应 launch.json 中的 program 
	         "${file}"
	       ],
		   "options": {
		     "cwd": "${workspaceFolder}"
		   },
		   "problemMatcher": [
		     "$gcc"
		   ],
		   "windows": {
		     "options": {
		       "shell": {
		         "executable": "PowerShell.exe"
		       }
		     }
		   },
		   "group": "build"
	     }
	   ]
	}    
 }
多文件结构

多文件结构是面向业务的最佳实战,它将代码拆分成多个文件,相比于单文件夹结构,可读性和可维护性更高。

首先安装 C/C++ Build Task 扩展,这个扩展由我本人编写,主要用于多文件结构编译。你还可以下载 示例代码 进行深入学习。

注意: 扩展需要 Visual Studio Code 版本 >= 1.49.0

{
  ...,
  "tasks": {
    "version": "2.0.0",
    "tasks": [
      {
        "label": "Build C/C++ Project", // 【必须】任务名称。对应 launch.json 中的 preLaunchTask
        "type": "cpp",  // 【必须】任务类型为 cpp 由扩展提供
        "sources": [ // 【必须】源文件。支持 glob 语法
          "${fileDirname}/**/*.cc"
        ],
        "output": "${workspaceFolder}/debug/${fileBasenameNoExtension}.exe", // 【必须】输出文件。对应 launch.json 中的 program
        "options": { //【可选】其他选项配置
          "cwd": "${fileDirname}" // 编译器工作目录
        },
        "includePath": [ //【可选】将在给定目录里查找头文件。支持 glob 语法
          "${workspaceFolder}/vendor/**/include"
        ],
        "libraryPath": [ //【可选】将在给定目录里查找库文件。支持 glob 语法
          "${workspaceFolder}/vendor/**/lib/*"
        ],
        "compilerPath": "g++", //【可选】编译器路径
        "compilerArgs": [ //【可选】编译器命令选项
          "-g" 
        ],
        "problemMatcher": [
          "$gcc"
        ],
        "group": "build"
      }
    ]
  }    
}

引申内容

Visual Studio

借助 Visual Studio 携带的 cl.exe 也可以进行编译 c/c++,这只是作为本文的引申阅读,有兴趣的同学可以深入研究下。

.vscode/tasks.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C++ x86",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,
      "preLaunchTask": "cl x86"
    }
  ]
}

.vscode/tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "cl x86",
      "type": "shell",
      "command": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Tools\\MSVC\\14.26.28801\\bin\\Hostx64\\x86\\cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "options": {
        "env": {
          "INCLUDE": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Tools\\MSVC\\14.26.28801\\include;C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\shared;C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\ucrt;C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\um;C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\winrt;",
          "LIB": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Tools\\MSVC\\14.26.28801\\lib\\x86;C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.18362.0\\ucrt\\x86;C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.18362.0\\um\\x86;"
        },
        "shell": {
          "executable": "PowerShell.exe"
        }
      },
      "group": "build"
    }
  ]
}

包管理器

打包一沓开源的 C/C++ 包管理工具送给你!

你可能感兴趣的:(C/C++,Visual,Studio,Code,c++)