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-gcc
,mingw-w64-x86_64-make
,mingw-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
(默认)选择 通过编码打开
并将编码改为 GBK
或 GB18030
,结束。
调试中文乱码问题
发现透过 gdb 运行的程序 中文显示会乱码。
推测原因: Powershell 和 gdb 显示的编码不同。
一个小窍门,别写中文代码。治标又治本。