文章目录
- 一、软件安装
- 1. 网址及下载的软件
- 2. VSCode中配置关于C++的最简插件:
- 二、C++调试环境的编译要求
- 1. 在编译时要带-g参数
- 2. 多文件编译需要分步编译
- 三、VSCode的调试配置如下:
- 1. 单文件调试设置
- 2. 多文件调试设置
- 四、VSCode的其他设置
- 1. 基本设置
- 2. VSCode向终端输出中文
一、软件安装
1. 网址及下载的软件
- VSCode下载地址: https://code.visualstudio.com/
- mingw64下载地址: https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
推荐下载:x86_64-win32-seh(x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z)
在C++中有 try…throw…catch,当它执行这种结构时,它需要保存现场还原现场,而 sjlj, seh, dwarf 正是实现这类过程的三种方式:
- sjlj 全称是 SetJump LongJump,前者设还原点,后者跳到还原点。
- seh 是 Borland 公司的,微软买了其专利使用权,它利用了FS段寄存器,将还原点压入,收到异常时弹出。
相较而言,sjlj 是 C 标准库就有的东西,seh 在 2014 年前是有专利的,从性能上说 seh 比 sjlj 快。- dwarf 我是在开源平台 MinGW 见到这名称,因为专利原因 MinGW 以前并不支持 seh,也许是为了保证性能,它又提供了 dwarf 这种方式。
也可以尝试一下集成安装包:https://nuwen.net/mingw.html。
- MSYS2(可选,可替代单独的mingw64,推荐使用MSYS2 MINGW64
)下载地址:https://www.msys2.org/
如果希望拥有一个包含本地编译环境的Bash,可以考虑安装一个MSYS2。它由一个名为mintty的命令行终端 ,git和subversion之类的版本控制系统,tar和awk之类的工具,甚至是autotools之类的构建系统组成,全部基于Cygwin修改。在MSYS2环境下,可以使用make或gcc/g++构建程序。MSYS2模拟的环境的根目录在“D:\msys64”,且家目录位于“D:\msys64\home”。MSYS2提供了一个包管理器:pacman(https://wiki.archlinux.org/title/pacman),可以如下安装编译工具集:
# 更新软件包(y:yes,u:update)
pacman -Syu
# 安装工具链
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
# 查找cmake是否已安装
pacman -Qs cmake 或者 pacman -Ss cmake
# 安装cmake
pacman -S mingw-w64-x86_64-cmake
# 安装neovim
pacman -S mingw-w64-x86_64-neovim
# 安装git
pacman -S git
# 安装mingw下的Autotools
pacman -S "${MINGW_PACKAGE_PREFIX}-autotools"
在MSYS2环境下编译程序
# 假定CMakeLists.txt配置如下
cmake_minimum_required(VERSION 3.2)
project(test)
set(CMAKE_AR D:/msys64/mingw64/bin/ar.exe)
set(CMAKE_C_COMPILER D:/msys64/mingw64/bin/gcc.exe)
set(CMAKE_CXX_COMPILER D:/msys64/mingw64/bin/g++.exe)
add_executable(test test.cpp)
# 注意,如果使用mingw64来编译,则需要加上参数-G "MinGW Makefiles"
cmake -S . -B build -G "MinGW Makefiles"
cmake --build build/
cd build/
./test.exe
Debug激活的套件是MinGW64:
如果希望VSCode使用MSYS2提供的终端,可以在.vscode/settings.json中配置如下:
{
"terminal.integrated.profiles.windows": {
"MSYS2 MINGW64": {
"path": "cmd.exe",
"args": [
"/c",
"D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -mingw64"
]
}
}
}
- CMake下载地址:https://cmake.org/download/
- 包管理器vcpkg下载地址(可选):https://vcpkg.io/en/
使用可参考:https://blog.csdn.net/gudufuyun/article/details/113787953
注意:用cmake编译项目时可能需要指定架构 cmake … -A Win32
- 控制台(可选):https://conemu.github.io/ 或者 https://github.com/cmderdev/cmder 或者 https://cmder.app/
VSCode中替换终端为Cmder可以如下配置:
- 局部配置在项目文件夹下的.vscode/settings.json中进行。
- 全局配置——Ctrl+Shift+P然后输入open user setting,打开settings.json配置文件,在其中进行设置。
// 配置终端 cmder
"terminal.integrated.profiles.windows": {
"cmd.exe": {
"path": "C:\\Windows\\system32\\cmd.exe",
"args": [
"/k D:\\cmder\\vendor\\init.bat"
]
}
},
// 设置为默认终端
"terminal.integrated.defaultProfile.windows": "cmd.exe",
x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z解压后的mingw64文件夹假定在D:\mingw64,需要把D:\mingw64\bin的路径加入Path环境变量(可以是用户环境变量)。
如果使用MSYS2环境,则无需单独下载mingw64。可以在MSYS2环境中通过pacman下载编译工具链。Windows的Path环境变量也需要相应追加msys64/mingw64/bin的路径,以识别gcc/g++的文件位置。
2. VSCode中配置关于C++的最简插件:
- C/C++ Extension Pack (是打包安装,一次性把所有C++相关的插件都安装了)
- Include Autocomplete
- Better C++ Syntax
- C/C++ Snippets
- GBKtoUTF8
- MSYS2/Cygwin/MinGW/Clang support(用于MSYS2环境)
二、C++调试环境的编译要求
1. 在编译时要带-g参数
g++ -g ./test.cpp -o test
2. 多文件编译需要分步编译
分步编译而不是编译链接一起执行,这样能够节省编译时间。
# 第一步:先编译生成.o文件
g++ -g main.cpp -c
g++ -g add.cpp -c
g++ -g multi.cpp -c
# 第二步:链接生成可执行文件
g++ *.o -o main
# 第三步:修改main.cpp源文件,重新生成被修改文件的.o文件。
g++ -g main.cpp -c
# 第四步:再链接生成可执行文件
g++ *.o -o main
三、VSCode的调试配置如下:
1. 单文件调试设置
记得要切回源码文件标签页
捕获到断点
F5键是 运行->启动调试 的快捷键。
接下来配置命令自动化设置(注意要切换到C++的源代码文件页)
生成的tasks.json不用修改,只需记录tasks.json文件中的”label“配置,并把label选项的内容拷贝到launch.json中完成配置即可。
2. 多文件调试设置
配置基本与前边单文件调试设置类似。结合CMake我们配置如下:
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(test)
add_executable(main main.cpp multip.cpp add.cpp main.h)
add_definitions("-Wall -g")
# 或者
cmake_minimum_required(VERSION 3.20)
project(learn01)
file(GLOB SRCS "./*.cpp")
file(GLOB HDRS "./*.h")
# include_directories("dev/include/") 指定头文件的路径:-I
# link_directories("dev/lib") 指定库文件的路径:-L
add_definitions("-Wall -g -fexec-charset=gbk")
#message("CMAKE_CXX_COMPILE_FEATURES = ${CMAKE_CXX_COMPILE_FEATURES}")
add_executable(testbed ${SRCS} ${HDRS})
# 支持:cxx_std_98,cxx_std_11,cxx_std_14,cxx_std_17,cxx_std_20
#target_compile_features(testbed PRIVATE cxx_std_17)
#target_link_libraries(testbed gsl gslcblas) 指定要链接的库:-l
或者使用快捷键Ctrl + Shift + P
如果上一步CMake:Configure出现错误,请卸载如下插件并重新安装:
这里CMake插件用于自动补全,语法提示和加亮显示。CMake Tools用于配置cmake工具的使用。
然后VSCode将自动扫描本机安装的C++编译器。之后:
这里要注意:VSCode中将一个打开的目录作为项目目录,并在该目录中自动生成.vscode目录——该目录中的settings.json作为CMake插件在VSCode中的配置文件。应该将本项目的总控CMakeLists.txt放置在和.vscode/同级的目录中,否则VSCode的CMake插件将不识别项目的目录。
在.vscode/中只涉及两个配置文件(多文件调试场景):settings.json和launch.json。
其中settings.json主要用于配置CMake插件,而launch.json用于调试配置(tasks.json用于配置调试前的动作)。
launch.json文件需要修改以下内容:
{
"version": "0.2.0",
"configurations": [
"program": "${fileDirname}\\build\\${fileBasenameNoExtension}.exe",
"miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe"
]
}
主要是在program的配置内容中加了build这一级目录(插件的约定)。
接下来F5调试项目如下:
也可以点击状态栏的如下图标:
如果修改了源文件,则需要点击Build按钮重新编译一下。
CMake Tools插件默认在CMakeLists.txt文件被打开和编辑后(保存)会自动进行configure配置。这有时候很不应景,可以通过在.vscode/settings.json中配置将上述自动配置功能关闭。
{
"cmake.configureOnOpen": false,
"cmake.configureOnEdit": false,
}
四、VSCode的其他设置
1. 基本设置
2. VSCode向终端输出中文
在VSCode编辑的源文件为UTF-8编码的情况下,如果在VSCode的终端中需要输出中文,则需要通过CMake的配置向编译器传递参数:
# 向g++传递编译参数-fexec-charset=gbk,这里Windows的cmd及powershell控制台终端默认都是GBK编码。
add_definitions("-Wall -g -fexec-charset=gbk")
默认g++的源文件输入编码为UTF-8,输出文件也为UTF-8,如果要修改输入输出文件的编码格式,需向g++传递如下参数:
-finput-charset=utf-8 -fexec-charset=gbk