Microsoft редактор Visual Studio Code є дуже приємним, але він не має підтримки за замовчуванням для створення C ++ проектів.
Як налаштувати це для цього?
Microsoft редактор Visual Studio Code є дуже приємним, але він не має підтримки за замовчуванням для створення C ++ проектів.
Як налаштувати це для цього?
Відповіді:
Існує набагато простіший спосіб компілювати та запускати код C ++, не потрібна конфігурація:
Ctrl+Alt+N
або натисніть, F1
а потім виберіть / введіть Run Code
, або клацніть правою кнопкою миші Текстовий редактор, а потім клацніть Run Code
у контекстному меню. Вихідне вікно.Крім того, ви можете оновити конфігурацію в settings.json, використовуючи різні компілятори C ++, як хочете, конфігурація за замовчуванням для C ++ наведена нижче:
"code-runner.executorMap": {
"cpp": "g++ $fullFileName && ./a.out"
}
running blablabla
. Ні підказок, нічого. Як я навіть зупиняю роботу коду?
Ctrl+Alt+M
. Щоб використовувати stdin для читання даних, ви можете перейти до File
-> Preference
-> Settings
для встановлення "code-runner.runInTerminal": true
. Більш детально ви можете звернутися до github.com/formulahendry/vscode-code-runner/isissue/91
Завдання щодо складання конкретні для проекту. Щоб створити новий проект, відкрийте каталог у Visual Studio Code.
Дотримуючись тут інструкцій , натисніть Ctrl+ Shift+ P, наберіть Configure Tasks
, виберіть його та натисніть Enter.
Файл task.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" }
]
Тепер при натисканні F8Makefile буде виконано, а помилки будуть підкреслені в редакторі.
ctrl+alt+b
за замовчуванням призначена для завдання збірки.
Приклад завдання makefile для нової версії 2.0.0 task.json.
У фрагменті нижче деяких коментарів я сподіваюся, що вони стануть у нагоді.
{
"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
}
}
}
]
}
.vscode
. Для контролю ревізії git одна з можливостей - використовувати для .gitignore
такого типу !.vscode/tasks.json
.
Ось як я налаштував свій VS для C ++
Не забудьте змінити відповідні шляхи до місця встановлення вашого MinGW
start.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++"
}
]
}
task.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
}
Довідка:
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include"
Щоб створити / запустити проекти C ++ у коді VS, вам потрібно вручну налаштувати файл task.json, який знаходиться у папці .vscode у папці робочої області. Щоб відкрити task.json , натисніть клавішу ctrl + shift + P і введіть Налаштування завдань , а потім натисніть клавішу Enter , вона переведе вас до task.json
Тут я надаю файлу task.json кілька коментарів, щоб зробити файл більш зрозумілим, його можна використовувати як орієнтир для налаштування задач.json , я сподіваюся, що він стане в нагоді
task.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
опис властивості типу :
- type : Тип завдання. Для спеціального завдання це може бути оболонка або обробка. Якщо оболонка вказана, команда інтерпретується як команда оболонки (наприклад: bash, cmd або PowerShell). Якщо процес вказаний, команда інтерпретується як процес для виконання.
Поведінкою терміналу можна керувати, використовуючи властивість презентації в task.json . Він пропонує такі властивості:
виявляють : контролює, чи інтегрована панель інтегрованого терміналу передньою. Дійсні значення:
- завжди - Панно завжди підводиться спереду. Це за замовчуванням
- ніколи - Користувач повинен явно перевести термінальну панель на передню панель за допомогою команди Вид> Термінал (Ctrl + `).
- беззвучний - Термінальна панель виводиться на передню панель, лише якщо вихід не перевіряється на помилки та попередження.
фокус : керує тим, що термінал фокусує вхід чи ні. За замовчуванням помилково.
- echo : контролює, чи виконана команда відлунюється в терміналі. За замовчуванням вірно.
- showReuseMessage : Контролює, чи потрібно відображати повідомлення "Термінал буде повторно використаний завданнями, натисніть будь-яку клавішу, щоб закрити його".
- панель : контролює, чи розділяється екземпляр терміналу між виконанням завдань. Можливі значення:
- Спільний : Термінал є спільним і вихід цього іншого запуску додається до цього ж терміналу.
- присвячений : Термінал призначений для конкретного завдання. Якщо це завдання буде виконано ще раз, термінал повторно використовується. Однак вихід іншої задачі представлений в іншому терміналі.
- нове : для кожного виконання цього завдання використовується новий чистий термінал.
- clear: контролює, чи очищений термінал перед запуском цього завдання. За замовчуванням помилково.
Від розчарування у зв'язку з відсутністю чіткої документації я створив проект Mac на github, який повинен просто працювати (як для побудови, так і для налагодження):
Зауважте, що для цього потрібні XCode та розширення cpptools VSCode Microsoft.
Я планую зробити те ж саме для Windows та Linux (якщо Microsoft спочатку не напише гідну документацію ...).
Перш за все, відкрийте розширення (Ctrl + Shift + X) та встановіть 2 розширення:
Потім перезавантажте код VS та виберіть кнопку відтворення у верхньому правому куті, яку програма запускає у вихідному терміналі. Ви можете побачити вихід Ctrl + Alt + N. Щоб змінити інші функції, перейдіть до налаштувань користувача.
Якщо ваш проект має конфігурацію 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, яке додає команду "Створення CMake" до VScode.
PS! problemMatcher
Є установка для clang
-builds. Для того, щоб використовувати GCC Я вважаю , що вам потрібно змінити , fileLocation
щоб relative
, але я не перевіряв це.
Ось як я налаштував свій VS для C ++ за допомогою компілятора g ++, і він чудово працює, включаючи параметри налагодження:
файл task.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"
}
файл start.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"
}
]
}
У мене також встановлено розширення 'C / C ++ для коду Visual Studio', встановлене у VS Code
Основна проблема тут полягає в тому, що побудова та зв'язування програми C ++ значною мірою залежить від використовуваної системи збирання. Вам потрібно буде підтримувати такі окремі завдання, використовуючи деяку комбінацію плагінів та спеціальний код:
Загальна підтримка мови C ++ для редактора. Зазвичай це робиться за допомогою ms-vscode.cpptools, який, як очікується, більшість людей також обробляє безліч інших матеріалів, таких як підтримка збірки. Дозвольте мені заощадити трохи часу: це не так. Однак ви, мабуть, цього все одно захочете.
Побудувати, очистити та відновити завдання. Саме тут ваш вибір системи складання стає величезною справою. Ви знайдете плагіни для таких речей, як CMake та Autoconf (Бог допоможе вам), але якщо ви використовуєте щось на зразок Meson і Ninja, вам доведеться написати кілька помічників і налаштувати спеціальний файл "task.json" для впорайтеся з цим. Майкрософт повністю змінив усе, що стосується цього файлу, протягом останніх кількох версій, аж до того, як його слід називати, і місць (так, placeS), на які він може йти, нічого не кажучи про зміну формату. Гірше, що вони підтримують сумісність назад, щоб не забути використовувати клавішу "версія", щоб вказати, який варіант ви хочете. Деталі дивіться тут:
https://code.visualstudio.com/docs/editor/tasks
... але зверніть увагу на конфлікт із:
https://code.visualstudio.com/docs/languages/cpp
ПОПЕРЕДЖЕННЯ: У ВСІХ ВІДПОВІДАХ НЕБЕЗПЕЧНО, БІЛЬШЕ, ЩО СПОЧАЄТЬСЯ З "ВЕРСІЄЮ", ВІДМОВЕНО НЕГО 2.0.0, ЗАБЕЗПЕЧЕНО.
Ось найближче, що я маю на даний момент. Зауважте, що я перекладаю більшість важких підйомів до сценаріїв, це насправді не дає мені жодних записів у меню, з якими я можу жити, і немає жодного хорошого способу вибору між налагодженням та випуском, не вводячи ще трьох явних записів у тут. З урахуванням сказаного, ось що я можу терпіти як мій файл .vscode / task.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 буде сукати, якщо його все одно немає. (Так, на даний момент, це означає, що я змушений був перевірити .vscode на підрив, що мені не приємно.) Зауважте, що мої сценарії побудови (не показані) просто створюють (або відтворюють) каталог DEBUG за допомогою, у мій випадок, мезон і побудова всередині нього (використовуючи, в моєму випадку, ніндзя).
З оновленим кодом VS ви можете це зробити наступним чином:
Натисніть ( Ctrl+ P) і введіть:
ext install cpptools
Відкрийте папку ( Ctrl+ K& 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 та .exe для проекту.
Для налагодження проекту натисніть F5та виберіть C ++ (Windows) .
У файлі start.json відредагуйте наступний рядок і збережіть файл:
"program": "${workspaceRoot}/hello.exe",
Удар F5.
Ви можете посилатися на цей останній список, який має 2.0.0
завдання для версії Visual Studio Code, https://gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454
Ви можете легко компілювати та запускати кожен файл, не оновлюючи завдання. Він є загальним, а також відкриває термінал для введення записів.
Можна використовувати Runner Code Runner для запуску коду зі значком відтворення вгорі праворуч ans за допомогою клавіші швидкої клавіші: Ctrl+Alt+N
і для переривання Ctrl+Alt+M
. Але за замовчуванням він показує лише вихід програми, але для отримання вводу потрібно виконати кілька кроків:
Ctrl +, а потім відкриється меню налаштувань і Розширення> Запустити конфігурацію коду прокрутіть вниз його атрибути і знайдіть Правка в налаштуваннях.json натисніть на нього і додайте наступний код, наполягайте на ньому:
{
"code-runner.runInTerminal": true
}
Зараз у Microsoft є розширення мови C / C ++. Ви можете встановити його, перейшовши до "швидко відкритої" речі ( Ctrl+ p) та ввівши:
ext install cpptools
Про це ви можете прочитати тут:
https://blogs.msdn.microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/
Це дуже базово, станом на травень 2016 року.