VSCode: Компиляция и отладка приложения C++

Поскольку мне всё равно пришлось ставить Visual Studio Community для того, чтобы установить Windows Kits для работы с WinAPI, то я решил не использовать MingW, а доустановить C++ build tools и использовать их для компиляции. В этом случае придётся переделать задачи (tasks) и настройки VSCode.

Хорошее описание нашёл здесь, его и буду использовать в данной заметке.

Нам потребуется

1. Естественно нам потребуется сама программа VSCode.
2. В Visual Studio Community должен быть установлен компонент Desktop development with C++:
VSCode: Компиляция и отладка приложения C++

Чтобы проверить успешную установку, достаточно вызвать Developer Command Prompt for VS 2019 (файл VsDevCmd.bat) из Пуска. Там нужно запустить файл cl.exe. Вывод консоли должен быть без ошибок:

**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.9.2
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cl.exe
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29913 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

 

3. Для VSCode должно быть установлено дополнение (расширение) Microsoft C/C++

Настройка

4. В Проводнике открываем рабочую папку проекта и, удерживая Shift , нажимаем правую кнопку мыши, после чего выбираем Open PowerShell window here
5. В открывшемся окошке PowerShell запускаем VSCode, для этого нужно набрать code . и нажать Enter :

PS C:\Users\Denis\source\repos\SampleVSCode> code .

6. В запущенном редакторе создадим новый файл:
FileNew File Ctrl+N
7. Это просто тест, поэтому код будет простейшим:

#include <iostream>
using namespace std;

int main()
{
    cout << "It Works!" << endl;
    cin.get();
}

8. Сохраним файл под именем main.cpp:
FileSave As…

Шаги 9-11 скорее всего не нужны. В статье они есть, но без них у меня всё тоже прекрасно компилируется.

 

9. Открываем палитру команд с помощью комбинации клавиш Ctrl+Shift+P
10. Список большой, поэтому проще ввести часть слова и выбрать нужную команду Edit Configurations UI из списка:
VSCode: Компиляция и отладка приложения C++
11. В конфигурации необходимо проверить, а, при необходимости, установить путь для компилятора:

C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29910/bin/Hostx64/x64/cl.exe

VSCode: Компиляция и отладка приложения C++
12. Внесём изменения в файл settings.json:

У меня глобальный файл настроек, а не только для проекта, поэтому я добавляю строчки в начало файла C:\Users\Denis\AppData\Roaming\Code\User\settings.json

 

"buildDir": "${workspaceRoot}\\build",
"buildCommand": "C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio\\2019\\Community\\Common7\\Tools\\VsDevCmd.bat && cl",

13. Ранее я уже создавал файл Задач tasks.json, поэтому сейчас я добавлю к нему новые строчки:

{
      "type": "shell",
      "label": "Set dependencies for build",
      "command": "if not exist ${config:buildDir} mkdir ${config:buildDir}"
    },
    {
      "label": "C/C++: cl.exe build active file",
      "detail": "Compile and build selected C++ project with Visual Studio cl.exe",
      "type": "shell",
      "command": "${config:buildCommand}",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${config:buildDir}\\${fileBasenameNoExtension}.exe",
        "/Fo${config:buildDir}\\",
        "/Fd${config:buildDir}\\",
        "${file}"     
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$msCompile"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "dependsOn": [
        "Set dependencies for build"
      ]
    },
Спасибо Владимиру, который указал в комментарии, что может возникнуть такая ошибка:

~ Missing '(' after 'if' in if statement.

CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
FullyQualifiedErrorId : MissingOpenParenthesisInIfStatement

В этом случае фрагмент кода с проверкой пути должен быть таким:

tasks.json
{
      "type": "shell",
      "label": "Set dependencies for build",
      "command": "cmd",
      "args": [
        "/C",
        "if not exist ${config:buildDir} mkdir ${config:buildDir}"
      ]
    },

Хотя, если у вас VSCode настроен для работы с CMD, а не PowerShell, то ошибки быть не должно!

 

14. Чтобы у нас была возможность запустить проект на отладку, можно использовать файл launch.json. Но я не хочу создавать такой файл для каждого проекта каждый раз, поэтому сделаю глобальную конфигурацию. Для этого я добавлю строчки в файл settings.json:

"launch": {
  "version": "0.2.0",
  "configurations": 
  [{
    "name": "cl.exe - Build and debug active file",
    "type": "cppvsdbg",
    "request": "launch",
    "program": "${config:buildDir}\\${fileBasenameNoExtension}.exe",
    "args": [],
    "stopAtEntry": false,
    "cwd": "${env:buildDir}",
    "environment": [],
    "console": "externalTerminal",
    "preLaunchTask": "C/C++: cl.exe build active file"
  }]
},

Благодаря этому, при нажатии F5 , проект будет откомпилирован, а потом запущен сразу после этого. Просто запустить, без отладки, можно комбинацией Ctrl+F5



Подписаться
Уведомление о
guest
2 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Владимир

Change the problematic line with this:
«command»: «cmd»,
«args»: [«/C», «if not exist ${config:buildDir} mkdir ${config:buildDir}»]

Last edited 2 лет назад by Владимир