Microsoft的Visual Studio Code编辑器相当不错,但它没有构建C ++项目的默认支持。
如何配置它来执行此操作?
答案 0 :(得分:91)
编译和运行C ++代码有一种更简单的方法,无需配置:
Ctrl+Alt+N
,或按F1
然后选择/键入Run Code
,或右键单击文本编辑器,然后单击{{在上下文菜单中,代码将被编译并运行,输出将显示在输出窗口中。此外,您可以根据需要使用不同的C ++编译器更新settings.json中的配置,C ++的默认配置如下:
Run Code
答案 1 :(得分:76)
构建任务是特定于项目的。要创建新项目,请在Visual Studio Code中打开目录。
按照说明here,按 Ctrl + Shift + P ,键入Configure Tasks
,选择它并按按输入。
将打开tasks.json文件。将以下构建脚本粘贴到文件中,然后保存:
{
"version": "0.1.0",
"command": "make",
"isShellCommand": true,
"tasks": [
{
"taskName": "Makefile",
// Make this the default build command.
"isBuildCommand": true,
// Show the output window only if unrecognized errors occur.
"showOutput": "always",
// Pass 'all' as the build target
"args": ["all"],
// Use the standard less compilation problem matcher.
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
现在转到菜单文件→首选项→键盘快捷键,并为构建任务添加以下键绑定:
// Place your key bindings in this file to overwrite the defaults
[
{ "key": "f8", "command": "workbench.action.tasks.build" }
]
现在当您按 F8 时,将执行Makefile,并且编辑器中的错误将加下划线。
答案 2 :(得分:36)
新的2.0.0 tasks.json版本的makefile任务示例。
在下面的一些评论的片段中,我希望它们会有用。
{
"version": "2.0.0",
"tasks": [
{
"label": "<TASK_NAME>",
"type": "shell",
"command": "make",
// use options.cwd property if the Makefile is not in the project root ${workspaceRoot} dir
"options": {
"cwd": "${workspaceRoot}/<DIR_WITH_MAKEFILE>"
},
// start the build without prompting for task selection, use "group": "build" otherwise
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
// arg passing example: in this case is executed make QUIET=0
"args": ["QUIET=0"],
// Use the standard less compilation problem matcher.
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["absolute"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
答案 3 :(得分:8)
以下是我配置VS for C ++的方法
<强> launch.json 强>
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (GDB)",
"type": "cppdbg",
"request": "launch",
"targetArchitecture": "x86",
"program": "${workspaceRoot}\\${fileBasename}.exe",
"miDebuggerPath":"C:\\mingw-w64\\bin\\gdb.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"externalConsole": true,
"preLaunchTask": "g++"
}
]
}
<强> tasks.json 强>
{
"version": "0.1.0",
"command": "g++",
"args": ["-g","-std=c++11","${file}","-o","${workspaceRoot}\\${fileBasename}.exe"],
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
<强> c_cpp_properties.json 强>
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceRoot}",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/x86_64-w64-mingw32",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/backward",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/tr1",
"C:/mingw-w64/x86_64-w64-mingw32/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"__GNUC__=6",
"__cdecl=__attribute__((__cdecl__))"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"${workspaceRoot}",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/x86_64-w64-mingw32",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/backward",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/tr1",
"C:/mingw-w64/x86_64-w64-mingw32/include"
]
},
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
],
"version": 3
}
参考:
答案 4 :(得分:6)
由于缺乏明确的文件而感到沮丧, 我在github上创建了一个Mac项目,它应该可以正常工作(包括构建和调试):
请注意,它需要XCode和VSCode Microsoft cpptools扩展。
我打算为Windows和Linux做同样的事情(除非微软先写好文档......)。
答案 5 :(得分:5)
如果您的项目具有CMake配置,则可以非常直接地设置VSCode,例如如下设置tasks.json
:
{
"version": "0.1.0",
"command": "sh",
"isShellCommand": true,
"args": ["-c"],
"showOutput": "always",
"suppressTaskName": true,
"options": {
"cwd": "${workspaceRoot}/build"
},
"tasks": [
{
"taskName": "cmake",
"args": ["cmake ."]
},
{
"taskName": "make",
"args" : ["make"],
"isBuildCommand": true,
"problemMatcher": {
"owner": "cpp",
"fileLocation": "absolute",
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
这假设工作区的根目录中有一个文件夹build
,并带有CMake配置。
还有一个CMake integration extension为VScode添加了“CMake build”命令。
PS!为problemMatcher
- 版本设置了clang
。要使用GCC,我相信您需要将fileLocation
更改为relative
,但我尚未对此进行测试。
答案 6 :(得分:5)
以下是我使用g ++编译器配置VS for C ++的方法,它的工作原理很好,包括调试选项:
tasks.json文件
{
"version": "0.1.0",
"command": "g++",
"isShellCommand": true,
// compiles and links with debugger information
"args": ["-g", "-o", "hello.exe", "hello.cpp"],
// without debugger information
// "args": ["-o", "hello.exe", "hello.cpp"],
"showOutput": "always"
}
launch.json文件
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (Windows)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/hello.exe",
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGw\\bin\\gdb.exe",
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"externalConsole": false,
"visualizerFile": "${workspaceRoot}/my.natvis"
}
]
}
我还有Visual Studio Code&#39; C / C ++。扩展安装在VS Code
中答案 7 :(得分:4)
使用更新的VS代码,您可以通过以下方式执行此操作:
点击( Ctrl + P )并输入:
ext install cpptools
打开一个文件夹( Ctrl + K &amp; Ctrl + O )并创建一个扩展名为 .cpp 的文件夹中的新文件(例如: hello.cpp ):
输入您的代码并点击保存。
点击( Ctrl + Shift + P 并输入Configure task runner
,然后选择other
在列表的底部。
在名称为 build.bat 的同一文件夹中创建批处理文件,并将以下代码包含在文件正文中:
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
set compilerflags=/Od /Zi /EHsc
set linkerflags=/OUT:hello.exe
cl.exe %compilerflags% hello.cpp /link %linkerflags%
按如下所示编辑 task.json 文件并保存:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "build.bat",
"isShellCommand": true,
//"args": ["Hello World"],
"showOutput": "always"
}
点击( Ctrl + Shift + B 运行构建任务。这将创建 .obj 项目的strong>和 .exe 文件。
要调试项目,请按 F5 并选择 C ++(Windows)。
在 launch.json 文件中,修改以下行并保存文件:
"program": "${workspaceRoot}/hello.exe",
点击 F5 。
答案 8 :(得分:3)
现在有一个来自Microsoft的C / C ++语言扩展。您可以通过转到&#34;快速打开&#34;来安装它。东西( Ctrl + p )并输入:
ext install cpptools
你可以在这里阅读:
https://blogs.msdn.microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/
截至2016年5月,这是非常基本的。
答案 9 :(得分:2)
您可以参考Visual Studio Code https://gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454
版本2.0.0
任务的最新要点
您可以轻松编译和运行每个文件而无需更新任务。它是通用的,也可以打开输入条目的终端。
答案 10 :(得分:2)
这里的基本问题是构建和链接C ++程序在很大程度上取决于所使用的构建系统。您需要使用插件和自定义代码的某种组合来支持以下不同的任务:
编辑器的常规C ++语言支持。通常,这是使用ms-vscode.cpptools完成的,大多数人希望它还能处理很多其他内容,例如构建支持。让我为您节省一些时间,事实并非如此。但是,您可能还是想要它。
构建,清理和重建任务。这是您选择构建系统的地方。您会找到CMake和Autoconf之类的插件(上帝会帮助您),但是如果您使用的是Meson和Ninja之类的插件,则必须编写一些帮助程序脚本,并配置一个自定义的“ tasks.json”文件来处理这些。在最近的几个版本中,Microsoft完全更改了该文件的所有内容,直到应有的名称以及可以使用的位置(是,placeS),更不用说完全更改格式了。更糟糕的是,他们对SORT OF保持向后兼容性,以确保使用“版本”键指定所需的变体。在此处查看详细信息:
https://code.visualstudio.com/docs/editor/tasks
...但是注意与以下内容冲突:
https://code.visualstudio.com/docs/languages/cpp
警告:在下面的所有答案中,低于2.0.0的带有“版本”标记的所有内容都将过时。
这是我目前最接近的东西。请注意,我将大部分繁重的工作放在脚本上,这实际上并没有提供我可以使用的任何菜单项,并且没有任何好的方法可以在调试和发布之间进行选择,而不仅仅是在其中添加三个显式条目。这里。综上所述,目前,我可以将.vscode / tasks.json文件容忍如下:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build project",
"type": "shell",
"command": "buildscripts/build-debug.sh",
"args": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
// Reveal the output only if unrecognized errors occur.
"echo": true,
"focus": false,
"reveal": "always",
"panel": "shared"
},
// Use the standard MS compiler pattern to detect errors, warnings and infos
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "rebuild project",
"type": "shell",
"command": "buildscripts/rebuild-debug.sh",
"args": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
// Reveal the output only if unrecognized errors occur.
"echo": true,
"focus": false,
"reveal": "always",
"panel": "shared"
},
// Use the standard MS compiler pattern to detect errors, warnings and infos
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "clean project",
"type": "shell",
"command": "buildscripts/clean-debug.sh",
"args": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
// Reveal the output only if unrecognized errors occur.
"echo": true,
"focus": false,
"reveal": "always",
"panel": "shared"
},
// Use the standard MS compiler pattern to detect errors, warnings and infos
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
请注意,从理论上讲,如果将该文件放在工作区根目录中,则该文件应该可以工作,这样您就不会将隐藏目录(.vscode)中的文件检查到修订控制系统中。我还没有看到它真正起作用。测试它,但如果失败,则将其放入.vscode。无论哪种方式,如果IDE仍然不存在,IDE都会bit之以鼻。 (是的,此刻,这意味着我被迫将.vscode签入Subversion,对此我感到不满意。)请注意,我的构建脚本(未显示)仅使用以下命令创建(或重新创建)DEBUG目录:我的情况下,介子,并在其中建立(在我的情况下,使用忍者)。
答案 11 :(得分:2)
要用VS代码构建/运行C ++项目,您需要手动配置工作区文件夹 .vscode 文件夹中的 tasks.json 文件。 要打开 tasks.json ,请按 ctrl + shift + P ,然后键入 Configure task ,然后按 enter ,它将带您到 tasks.json
在这里,我为我的 tasks.json 文件提供了一些注释,以使该文件更易理解,它可以用作配置 tasks.json 的参考,希望会有用
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build & run", //It's name of the task , you can have several tasks
"type": "shell", //type can be either 'shell' or 'process' , more details will be given below
"command": "g++",
"args": [
"-g", //gnu debugging flag , only necessary if you want to perform debugging on file
"${file}", //${file} gives full path of the file
"-o",
"${workspaceFolder}\\build\\${fileBasenameNoExtension}", //output file name
"&&", //to join building and running of the file
"${workspaceFolder}\\build\\${fileBasenameNoExtension}"
],
"group": {
"kind": "build", //defines to which group the task belongs
"isDefault": true
},
"presentation": { //Explained in detail below
"echo": false,
"reveal": "always",
"focus": true,
"panel": "shared",
"clear": false,
"showReuseMessage": false
},
"problemMatcher": "$gcc"
},
]
}
现在,直接从VS code tasks documentation声明
type 属性的描述:
- 类型:任务的类型。对于自定义任务,它可以是shell或进程。如果指定了shell,则解释命令 作为shell命令(例如:bash,cmd或PowerShell)。如果 指定了process,该命令将被解释为 执行。
可以使用以下命令控制终端的行为 tasks.json 中的 presentation 属性。它提供以下属性:
显示:控制是否将集成终端面板置于前面。有效值为:
- 总是-面板总是放在最前面。这是默认设置
- 从不-用户必须使用 查看>终端命令(Ctrl +`)。
- silent -仅在不扫描输出中是否有错误和警告的情况下,才将终端面板置于前面。
焦点:控制终端是否获取输入焦点。默认值为false。
- echo :控制是否在终端中回显执行的命令。默认值为true。
- showReuseMessage :控制是否显示“终端将被任务重用,请按任意键将其关闭”消息。
- 面板:控制是否在任务运行之间共享终端实例。可能的值为:
- 共享:终端是共享的,其他任务运行的输出将添加到同一终端。
- 专用:终端专用于特定任务。如果再次执行该任务,则将重新使用终端。然而 不同任务的输出显示在不同的终端中。
- 新:该任务的每次执行都使用新的干净终端。
- 清除:控制是否在运行此任务之前清除终端。默认值为false。
答案 12 :(得分:1)
首先,转到扩展名(Ctrl + Shift + X)并安装2个扩展名:
然后,重新加载VS Code,然后在程序在输出终端中运行的右上角选择一个播放按钮。您可以通过Ctrl + Alt + N查看输出。 要更改其他功能,请转到用户设置。
答案 13 :(得分:0)
可以使用扩展名 Code Runner 通过快捷键Ctrl+Alt+N
运行带有右上角播放图标的代码,并放弃Ctrl+Alt+M
。但是默认情况下,它仅显示程序的输出,但是要接收输入,您需要执行一些步骤:
Ctrl + ,然后打开设置菜单,并且扩展>运行代码配置,向下滚动其属性并找到在settings.json中编辑,然后单击它并在其内部添加以下代码:
{
"code-runner.runInTerminal": true
}