VS Code C\C++ 环境搭建 踩坑日记


VS Code C\C++ 环境搭建 踩坑日记

前言

是的,我原来一直用的是一个野生 IDE (小熊猫 Dev C++)。就是图一个一键安装,够用就完事儿了,不像 VS Code 配置极其烦人。

但是吧,VS Code 的内建 Git 支持,云同步,多语言支持,无敌拓展性等等等等东西。这也太香了!!


所以呢,写一篇这个博客来记录一下我痛苦的配置流程,权当一篇学习笔记。也是为了我自己以后在新环境配置的时候能有一个资料用以参考。

本文中的所有配置都是在 Windows 环境下完成。仅供参考。

网络上的资料水准真的都太参差不齐了。甚至我看到的一部分资料放到现在已经完全失效。

幸运的是,我最终还是找到了一个靠谱的资料来源。

VS Code 官网上的 Documentation,虽然都是英文的,但是微软背书,保证靠谱。

强烈推荐去看官方的文档!!

Visual Studio Code 内置变量定义

基本依赖

MinGW----Minimalist GNU for Windows

MinGW-w64 的安装可以自己去完善找包来安装,也可以通过管理平台来安装。

微软官方的 Documentation 里面使用的是 MSYS2 来管理 MinGW .

所以,我们用 MSYS2 来管理我们电脑中的 MinGW。

按照官网的操作来。


安装

打开安装包,一路下一步。

配置

更新包列表

打开 MSYS2 的 bash,输入如下命令更新包。

pacman -Syu
pacman -Su

选择包

输入一下命令,获取 MinGW64 的所有包的列表。

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

你会看到这样的输出 (我的输出会少一些,因为我已经安装过了)

:: There are 10 members in group mingw-w64-x86_64-toolchain:
:: Repository mingw64
   1) mingw-w64-x86_64-gcc-ada  2) mingw-w64-x86_64-gcc-fortran
   3) mingw-w64-x86_64-gcc-libgfortran  4) mingw-w64-x86_64-gcc-objc
   5) mingw-w64-x86_64-gdb-multiarch  6) mingw-w64-x86_64-libgccjit
   7) mingw-w64-x86_64-libmangle-git  8) mingw-w64-x86_64-pkgconf
   9) mingw-w64-x86_64-tools-git  10) mingw-w64-x86_64-winstorecompat-git

依次选择 mingw-w64-x86_64-gccmingw-w64-x86_64-makemingw-w64-x86_64-gdb(调试工具)。

等待联网下载安装,速度慢可以换镜像源或者挂个梯子。


添加环境变量

环境变量-系统变量-Path 中添加一条新的路径

C:\msys64\mingw64\bin(默认路径,可根据本机情况设置)



重启 VS Code。若工作目录下无任何配置,VS Code 会自动识别到 MinGW 的位置。

CMake----自动生成 C/C++ Makefile

在第二次寒假作业中,需要用到多文件编译。VS Code 并未集成该功能,需要我们手动配置一下。


打开 CMake 的官网,找到 Windows 的安装包下载并安装。

安装的时候勾上 添加到系统变量


更多内容可以参考,CMake 入门实战 | HaHack

VS Code 插件

到 VS Code 的插件市场里面找到如下插件并安装。

  • 微软自带的 C\C++ 包装上
  • Code Runner (单文件直接用这个编译运行就好了,省事)
  • CMake
  • CMake Tools
  • (可选) C/C++ Project Generator [替代 CMake,直接生成 Makefile,不太好用]

配置 VS Code

所有配置工作完成了之后记得登录微软账号,同步全局设置。

下次就不用在调试了,直接登陆,一键同步就好了。


多文件编译

多文件编译完全可以参考微软官方关于 CMake 配置的文档 Get started with CMake Tools on Linux。

虽然是适用于 Linux 平台的文档,但是 Windows 下也是完全适用的。

没有中文就是了,全英文的看着有点点费劲。


简要记录一下关键步骤。

  • CMake Generator 设置为 MinGW。

  • 修改 CMakefile

    CMakefile 的默认设置下是不会自动关联文件夹内的所有文件的。

    要实现这一点需要再 CMakefile 中加入以下内容。

aux_source_directory(. DIR_SRCS)
add_executable(projectname ${DIR_SRCS})

还有,如果要打开编译器的所有警告要加入以下内容

add_compile_options(-Wall -Wextra)


为什么使用 CMake

照理来说,在 Linux中,一般 C/C++ 项目的编译是依赖于 make 程序 读取 Makefile 来实现的.

但是呢,每个项目都自己写 Makefile 比较麻烦,并且这里还有一个学习门槛。


于是乎,CMake工具诞生了。CMake 工具能够为我们大幅度简化编写 Makefile 的这一步骤,通过 CMakeLists.txt 这个文件为我们自动生成 Makefile,实现多文件编译的半自动化。

此外,CMake 还可以为我们提供不同 IDE 之间工程文件的转换,提供跨平台编译 C/C++ 项目的特性。


GCC G++的区别

在编译运行源代码的时候,VS Code 会弹出一个窗口让你选择使用那个编译器。gcc 和 g++ 就在供你选择的列表当中。这个要怎么选择呢?

先说结论,gcc 和 g++ 是两个不同的东西。

一般来说,在编译 C 语言程序的时候使用 gcc

在编译 C++ 语言程序的时候使用 g++


GCC G++
对于输入文件的处理 区分.c和.cpp编译 不区分,统一当做cpp编译
是否链接 C++ 标准库 不链接 STL 自动链接 STL

Reference


我遇到的问题

看不到返回值

在 Dev C++ 中,通过 Dev C++ 运行的程序都能够显示出程序的返回值和程序运行时间。而在 VS Code 中则没有这个显示。



可以从 Dev C++ 里面扣一个 ConsolePauser.exe 出来,用他来运行编译出来的 exe 文件可以捕获到程序的返回值。

参考 ConsolePauser 的帮助提示。

Usage: ConsolePauser.exe <0|1>

1 means the STDIN is redirected by Dev-CPP;0 means not


修改 Code Runner 的设置,加到全局设置里面去。

    "code-runner.executorMap": {
		// ...
        "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && ConsolePauser 0 $dir$fileNameWithoutExt",
        "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && ConsolePauser 0 $dir$fileNameWithoutExt",
        "objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && ConsolePauser 0 $dir$fileNameWithoutExt",
        // ...

    }

配置完成之后,透过 Code Runner 运行的 C/C++ 程序就能够显示程序返回值。

PS D:\Projects\Codes\programming-daily> cd "Your dir" ; if ($?) { gcc hello.c -o hello } ; if ($?) { ConsolePauser 0 .\hello }

Hello, world!
--------------------------------
Process exited after 0.02 seconds with return value 666

编译选项全部开开

因为之前在 小熊猫 Dev C++ 里面报错提示就很非常细致。

若要打开编译器的全部提示以及额外提示,需要在编一下选项中添加如下参数

--Wall--Wextra

W 表示 Warning



(后来在 C++ Primer里面也看到了推荐打开这个选项的提示)

中文代码显示问题

在 VS Code 中,打开含有中文内容的源码全部都会变成乱码。

若要恢复中文内容在编辑器中的正常显示,需要在 VS Code 的右下角找到 UTF-8 (默认)选择 通过编码打开 并将编码改为 GBKGB18030,结束。


调试中文乱码问题

发现透过 gdb 运行的程序 中文显示会乱码。

推测原因: Powershell 和 gdb 显示的编码不同。

一个小窍门,别写中文代码。治标又治本。