C++ и среды разработки

Предположим, мы хотим научиться программировать на C/C++. Для этого нам понадобятся следующие вещи:

  1. Написать простейший исходный код (программа HelloWorld)
  2. Скомпилировать исходный код в исполняемое приложение
  3. Запустить приложение (в том числе, в режиме отладки)

В чем будем писать исходный код? Текстовый редактор.

Сгодится любой текстовый редактор. Но желательно, с подсветкой синтаксиса. Я привык пользоваться Notepad++ (для справки: я — пользователь Windows). Другой редактор, которым я пользуюсь, но для программирования на платформе .NET, это — Visual Studio Code (или сокращенно — VSCode). В обоих редакторах есть подсветка синтаксиса C/C++ (в VSCode нужно будет установить расширение C/C++ for Visual Studio Code (Preview)).

Исходный код программы HelloWorld

Создайте где-нибудь на своем ПК папку, в которой будут лежать все файлы, необходимые для построения приложения (среди этих файлов будет в частности файл исходного кода, но, возможно, не только он один). На всякий случай: желательно, чтобы путь к папке не содержал пробелов. Папку можно назвать, скажем, helloworld. Создайте в папке текстовый файл (я обычно называю его main.cpp) и скопируйте в него текст программы HelloWolrd:

// main.cpp

#include <iostream>

int main()
{
    std::cout << "Hello";
    std::cin.get();
    return 0;
}

Чем скомпилировать исходный код? Нам нужен компилятор.

Я знаю два варианта…

1. Пакет Windows SDK от Microsoft, который содержит компилятор, отладчик и прочее.

Насколько мне известно, Windows SDK ныне можно установить только в составе Visual Studio. Тем лучше — вы сразу получите и интегрированную среду разработки (правда размер ее дистрибутива — несколько гигабайт). Запустить компилятор или отладчик вы сможете из командной строки (ярлык Developer Command Prompt for Visual Studio в меню Пуск), но вряд ли, установив Visual Studio, вы захотите возиться с командной строкой — скорее всего вы будете запускать и компиляцию и отладку из IDE (IDE — Integrated Development Envinronment — интегрированная среда разработки).

2. Компилятор GCC (GNU Compiler Collection)

GCC пользователи Windows могут заполучить в составе пакетов Cygwin или MinGW (Minimalist GNU for Windows).
О том, как установить Cygwin, я писал в заметке Установка Cygwin. С MinGW все аналогично. Главное — не забыть добавить в переменную окружения PATH путь к папке bin внутри папки установки Cygwin или MinGW. Только я бы не советовал пытаться использовать на одном и том же ПК и Cygwin, и MinGW — потому что если добавить в переменную PATH пути к папкам bin обоих этих пакетов, наверняка возникнет куча проблем при компиляции — я хлебнул этого, когда настраивал компиляцию и отладку в VSCode. Поэтому лучше установите на свой ПК что-то одно — либо Cygwin, либо MinGW, но не оба сразу.

Cygwin и MinGW — это, грубо говоря, наборы утилит, портированных с Unix на Windows. Никакой IDE там нет, поэтому запускать компилятор G++ и отладчик GDB вы будете из командной строки. О том, как это делается, рассказано в заметке C/C++ в Cygwin. Но, опять же, никому не охота возиться с командной строкой. И тут мне известны два варианта:

  • Makefile и утилита make
  • Настройка текстового редактора для автоматического запуска из него утилит командной строки

Про makefile’ы у меня немножко рассказано в заметке Изучаем архитектуру Intel x86-64 при помощи ассемблера (Часть 2 — Настройка проекта osdevlearning). А здесь рассмотрим настройку текстовых редакторов.

Настройка Notepad++ для компиляции

К сожалению, загуглив, узнал, что Notepad++ не позволяет выполнять отладку привычным нам способом (как в Visual Studio или VSCode). Однако его можно настроить хотя бы для компиляции и запуска программы без отладки. Процесс подобной настройки показан в видео на YouTube How to Compile/Execute C/C++ code in Notepad++ with MinGW. Вкратце: в Notepad++ надо будет установить плагин NppExec:

Меню Plugins > Plugin Manager > [ищем NppExec] > Install

Плагин умеет выполнять скрипты. Можно написать некий скрипт, который будет запускать компилятор, передавая ему нужные аргументы командной строки:

Меню Plugins > NppExec > Execute

Пишем скрипт:

npp_save
cd "$(CURRENT_DIRECTORY)"
g++ "$(FILE_NAME)" -o $(NAME_PART) -ggdb
NPP_RUN $(NAME_PART)

Сохраняем скрипт:

Save > [придумываем имя для скрипта, например, compile C/C++] > OK

Устанавливаем галку, чтобы отображалось окошко консоли:

Меню Plugins > NppExec > Show Console

Открываем файл исходного кода (например, наш main.cpp). Далее

Меню Plugins > NppExec > Execute > [выбираем скрипт compile C/C++] > OK

Видим в окошке консоли текстовый вывод компилятора. Если программа скомпилировалась, то она еще и запустится.

Настройка VSCode для компиляции и отладки

VSCode — это как бы «всего лишь» текстовый редактор с подсветкой синтаксиса, но специально заточенный на превращение его в полноценную IDE. VSCode не содержит в себе ни компилятора ни отладчика, их надо установить отдельно (см. выше). А для того, чтобы придать VSCode функциональность IDE, обычно требуется установить некое расширение (в нашем случае — C/C++ for Visual Studio Code (Preview)) и выполнить некую настройку, в которой указывается путь к компилятору, путь к отладчику, их параметры командной строки и прочее. Подобные настройки VSCode хранит в папке вашего проекта (helloworld) в текстовых файлах в формате JSON (JavaScript Object Notation). Формат достаточно простой: "имя параметра": значение параметра, "имя параметра": значение параметра и т. д. Как настроить VSCode для компиляции и отладки, написано на страничке расширения C/C++ for Visual Studio Code (Preview). Я эти инструкции здесь повторять не буду, а просто приведу содержимое файлов JSON, которые у меня получились в результате настройки VSCode для работы с компилятором и отладчиком из пакета Cygwin.

Итак, вот структура папки проекта helloworld:

helloworld
├── main.cpp
└── .vscode
    ├── c_cpp_properties.json
    ├── tasks.json
    └── launch.json

Теперь содержимое файлов:

// c_cpp_properties.json
// Путь к компилятору, настройки IntelliSense и другое
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/cygwin64/usr/include/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "C:/cygwin64/bin/g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x86"
        }
    ],
    "version": 4
}
// tasks.json
// Задачи, которые можно запускать при помощи меню View > Command Palette > Tasks: Run Task
// Здесь - запуск компилятора с некими параметрами командной строки
{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "build hello world",
        "type": "shell",
        "command": "g++",
        "args": ["-g", "-o", "helloworld", "helloworld.cpp"],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
}
// launch.json
// Настройки для отладки, в частности - путь к отладчику
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
      {
        "name": "(gdb) Launch",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/helloworld.exe",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": true,
        "MIMode": "gdb",
        "miDebuggerPath": "C:/cygwin64/bin/gdb.exe",
        "setupCommands": [
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          }
        ]
      }
    ]
}

Как запустить компиляцию:

Меню View > Command Palette > Tasks: Run Build Task

Как запустить отладку:

Меню Debug > Start Debugging

То, что мы таким образом настроили VSCode, позволяет нам скомпилировать один файл исходного кода (main.cpp). А что делать, когда файлов много? VSCode — это текстовый редактор, он не создает файл проекта (.vcproj) как Visual Studio, который работает а-ля makefile, т. е. описывает процесс построения приложения (построение — это компиляция и компоновка). Поэтому я подозреваю, что для построения больших проектов на C++, состоящих из многих файлов исходного кода, вам придется самостоятельно создавать makefile и конфигурировать VSCode для запуска утилиты make.

Резюме

На мой взгляд, для начинающего самый простой путь — установить Visual Studio Community Edition (даже несмотря на большой объем дистрибутива). Вы сразу получаете IDE, и вам не надо ничего настраивать. Ну а для матерых программистов копаться в разных настройках, конфигурациях и командных строках — святое дело.

На этом всё. В следующей заметке надеюсь написать про начало работы с Qt.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *