Редактор кода Visual Studio от Microsoft довольно хорош, но у него нет поддержки по умолчанию для создания проектов C ++.
Как мне настроить это, чтобы сделать это?
Редактор кода Visual Studio от Microsoft довольно хорош, но у него нет поддержки по умолчанию для создания проектов 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/issues/91
Задачи сборки зависят от проекта. Чтобы создать новый проект, откройте каталог в Visual Studio Code.
Следуя приведенным здесь инструкциям , нажмите Ctrl+ Shift+ P, введите Configure Tasks
, выберите его и нажмите Enter.
Файл 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, а ошибки будут подчеркнуты в редакторе.
ctrl+alt+b
для задачи сборки.
Пример задачи make-файла для новой версии 2.0.0 tasks.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 revision control одна возможность - использовать для .gitignore
шаблона вроде !.vscode/tasks.json
.
Вот как я настроил свой VS для C ++
Убедитесь, что изменили подходящие пути к тому месту, где установлен MinGW
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
}
Ссылка:
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include"
Чтобы создавать / запускать проекты C ++ в коде VS, вам необходимо вручную настроить файл tasks.json, который находится в папке .vscode в папке рабочей области. Чтобы открыть tasks.json , нажмите Ctrl + Shift + P , и введите настройки задач и нажмите войти , это приведет вас к 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
описание свойства типа :
- Тип : тип задачи. Для пользовательской задачи это может быть либо оболочка, либо процесс. Если указан shell, команда интерпретируется как команда shell (например: bash, cmd или PowerShell). Если указан процесс, команда интерпретируется как процесс для выполнения.
Поведение терминала можно контролировать с помощью свойства презентации в tasks.json . Он предлагает следующие свойства:
раскрыть : Управляет выводом панели встроенного терминала на передний план. Допустимые значения:
- всегда - панель всегда выдвигается вперед. Это по умолчанию
- never - пользователь должен явно переместить панель терминала вперед, используя команду View> Terminal (Ctrl + `).
- тихий - панель выводится на передний план, только если выход не сканируется на наличие ошибок и предупреждений.
focus : контролирует, принимает ли терминал фокус ввода или нет. По умолчанию установлено значение false.
- echo : определяет, отображается ли выполненная команда в терминале. По умолчанию это правда.
- showReuseMessage : Управляет показом сообщения «Терминал будет повторно использоваться задачами, нажмите любую клавишу, чтобы закрыть его».
- панель : контролирует, является ли экземпляр терминала общим для выполнения задач. Возможные значения:
- shared : терминал является общим, и результаты других запусков задач добавляются к тому же терминалу.
- выделенный : терминал предназначен для конкретной задачи. Если эта задача выполняется снова, терминал используется повторно. Однако выходные данные другой задачи представлены в другом терминале.
- new : при каждом выполнении этой задачи используется новый чистый терминал.
- clear: контролирует, очищается ли терминал перед выполнением этой задачи. По умолчанию установлено значение false.
Из-за разочарования в связи с отсутствием четкой документации я создал проект Mac на github, который должен просто работать (как сборка, так и отладка):
Обратите внимание, что для этого требуется XCode и расширение cpptools Microsoft VSCode.
Я планирую сделать то же самое для 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, которое добавляет команду VSake build в VScode.
PS! Это problemMatcher
настройка для clang
-builds. Чтобы использовать GCC, я считаю, что вам нужно перейти fileLocation
на relative
, но я не проверял это.
Вот как я настроил VS для C ++ с помощью компилятора g ++, и он прекрасно работает, включая параметры отладки:
файл 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"
}
]
}
У меня также есть расширение 'C / C ++ для Visual Studio', установленное в VS Code
Основная проблема заключается в том, что сборка и компоновка программы на C ++ сильно зависит от используемой системы сборки. Вам нужно будет поддерживать следующие отдельные задачи, используя некоторую комбинацию плагинов и пользовательского кода:
Общая поддержка языка C ++ для редактора. Обычно это делается с помощью ms-vscode.cpptools, который, как ожидается, большинство людей также обрабатывает много других вещей, таких как поддержка сборки. Позвольте мне сэкономить вам время: это не так. Тем не менее, вы, вероятно, все равно захотите.
Построить, очистить и восстановить задачи. Здесь ваш выбор системы сборки становится огромным делом. Вы найдете плагины для таких вещей, как CMake и Autoconf (да поможет вам Бог), но если вы используете что-то вроде Meson и Ninja, вам придется написать несколько вспомогательных скриптов и настроить собственный файл "tasks.json" для справиться с этим. Microsoft полностью изменила все в этом файле за последние несколько версий, вплоть до того, как он должен называться, и мест (да, мест), куда он может пойти, не говоря уже о полном изменении формата. Хуже того, они в некотором роде сохранили обратную совместимость, чтобы использовать ключ «версия», чтобы указать, какой вариант вы хотите. Подробности смотрите здесь:
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 будет сукой, если ее там нет. (Да, на данный момент это означает, что я был вынужден проверить .vscode в subversion, что меня не устраивает.) Обратите внимание, что мои сценарии сборки (не показаны) просто создают (или воссоздают) каталог 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чтобы запустить задачу Build. Это создаст файлы .obj и .exe для проекта.
Для отладки проекта нажмите F5и выберите C ++ (Windows) .
В файле launch.json отредактируйте следующую строку и сохраните файл:
"program": "${workspaceRoot}/hello.exe",
Хит F5.
Вы можете сослаться на этот последний гист, имеющий 2.0.0
задачу версии для кода Visual Studio, https://gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454
Вы можете легко скомпилировать и запустить каждый файл без обновления задачи. Он универсален, а также открывает терминал для ввода данных.
Можно использовать Extension Code Runner для запуска кода со значком воспроизведения вверху справа и с помощью сочетания клавиш: Ctrl+Alt+N
и для отмены Ctrl+Alt+M
. Но по умолчанию он показывает только вывод программы, но для получения ввода вам нужно выполнить несколько шагов:
Ctrl +, а затем открывается меню настроек и Расширения> Выполнить настройку кода, прокрутите вниз его атрибуты и найдите « Редактировать в settings.json», щелкните по нему и добавьте следующий код:
{
"code-runner.runInTerminal": true
}
Теперь есть расширение C / C ++ от Microsoft. Вы можете установить его, перейдя к пункту «быстрого открытия» ( Ctrl+ p) и набрав:
ext install cpptools
Вы можете прочитать об этом здесь:
https://blogs.msdn.microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/
Это очень простой, по состоянию на май 2016 года.