vscode 写C++
官方资料链接
首先你需要有一个编译器,linux中自带了 g++、gcc,windows中你需要下载一个 mingw-w64 编译器
三个重要文件,vscode上写C++也是围绕这三个文件编译、debug
- task.json
- launch.json
- c_cpp_properties.json
1.task.json
当你第一次运行你的程序时,C++扩展会创建tasks.json,你可以在你的项目的.vscode文件夹中找到它。tasks.json存储构建配置。
你的新tasks.json文件看起来应该类似于下面的JSON。
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
命令设置指定了要运行的程序;在本例中是g++。args数组指定了将被传递给g++的命令行参数。这些参数必须按照编译器所期望的顺序指定。
这个任务告诉 g++ 接收活动文件( f i l e ),对其进行编译,并在当前目录( {file}),对其进行编译,并在当前目录( file),对其进行编译,并在当前目录({fileDirname})下创建一个可执行文件,其名称与活动文件相同,但扩展名为 .exe(${fileBasenameNoExtension}.exe),在我们的例子中产生了 helloworld.exe。
标签值(label value)是你将在任务列表中看到的内容;你可以随心所欲地命名它。
细节值(detail )是你将作为任务列表中任务的描述。强烈建议重命名这个值,以区别于类似的任务。
从现在开始,播放按钮将从tasks.json中读取信息以确定如何构建和运行你的程序。你可以在tasks.json中定义多个编译任务,哪个任务被标记为默认任务,播放按钮就会使用哪个。如果你需要改变默认的编译器,你可以运行Tasks:配置默认构建任务。或者,你可以修改tasks.json文件,通过替换这一段来删除默认任务。
"group": {
"kind": "build",
"isDefault": true
},
"group": "build",
你可以通过使用" w o r k s p a c e F o l d e r / ∗ . c p p " 这样的参数而不是 {workspaceFolder}/*.cpp "这样的参数而不是 workspaceFolder/∗.cpp"这样的参数而不是{file}来修改你的tasks.json,以构建多个C++文件。这将构建当前文件夹中的所有.cpp文件。你也可以修改输出文件名,用一个硬编码的文件名代替"${fileDirname}${fileBasenameNoExtension}.exe"(例如"${workspaceFolder}\myProgram.exe"
2.launch.json
当你用播放按钮或F5进行调试时,C++扩展会即时创建一个动态调试配置.
在有些情况下,你会想定制你的调试配置,比如指定运行时传递给程序的参数。你可以在 launch.json 文件中定义自定义调试配置。
要创建 launch.json,从播放按钮的下拉菜单中选择添加调试配置。
VS Code创建了一个 launch.json文件,它看起来像这样:
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}
在上面的JSON中,program指定了你要调试的程序。在这里,它被设置为活动文件文件夹( f i l e D i r n a m e )和带有 . e x e 扩展名的活动文件名( {fileDirname})和带有.exe扩展名的活动文件名( fileDirname)和带有.exe扩展名的活动文件名({fileBasenameNoExtension}.exe),如果helloworld.cpp是活动文件,那么它就是helloworld.exe。args属性是一个参数数组,用于在运行时传递给程序的参数.
默认情况下,C++扩展不会向你的源代码添加任何断点,stopAtEntry值被设置为false。
将stopAtEntry值改为true,使调试器在你开始调试时在main方法上停止。
从现在开始,在启动你的程序进行调试时,播放按钮和F5将从你的launch.json文件中读出。
3.c_cpp_properties.json
如果你想对C/C++扩展进行更多的控制,你可以创建一个c_cpp_properties.json文件,它将允许你改变设置,如编译器的路径、包含路径、C++标准(默认为C++17)等等。
你可以通过运行命令C/C++来查看C/C++的配置UI。编辑配置(用户界面),从命令调板(Ctrl+Shift+P)查看。
这将打开C/C++配置页面。当你在这里做修改时,VS Code会把它们写到.vscode文件夹中一个叫做c_cpp_properties.json的文件中。
在这里,我们将配置名称改为GCC,将编译器路径下拉设置为g++编译器,并将IntelliSense模式改为与编译器相匹配(gcc-x64)。
Visual Studio Code将这些设置放在.vscode\c_cpp_properties.json中。如果你直接打开该文件,它看起来应该是这样的。
{
"configurations": [
{
"name": "GCC",
"includePath": ["${workspaceFolder}/**"],
"defines": ["_DEBUG", "UNICODE", "_UNICODE"],
"windowsSdkVersion": "10.0.18362.0",
"compilerPath": "C:/msys64/mingw64/bin/g++.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
当你的头文件不在你的工作空间或标准库中时,只需添加 includePath 参数设置。
compilerPath
该扩展使用compilerPath设置来推断C++标准库头文件的路径。当扩展知道在哪里可以找到这些文件时,它就可以提供智能补全和转到定义导航等功能。
C/C++扩展试图根据它在你的系统上发现的情况,用默认的编译器位置填充compilerPath。该扩展在几个常见的编译器位置寻找。
The compilerPath search order is:
- First check for the Microsoft Visual C++ compiler
- Then look for g++ on Windows Subsystem for Linux (WSL)
- Then g++ for Mingw-w64.
如果你安装了Visual Studio或WSL,你可能需要改变compilerPath以匹配你项目的首选编译器。例如,如果你使用i686架构、Win32线程和sjlj异常处理安装选项安装了Mingw-w64版本8.1.0,路径会是这样的。C:\Program Files (x86)\mingw-w64\i686-8.1.0-win32-sjlj-rt_v6-rev0\mingw64\bin\g++.exe