Предположим, мы хотим научиться программировать на C/C++. Для этого нам понадобятся следующие вещи:
- Написать простейший исходный код (программа HelloWorld)
- Скомпилировать исходный код в исполняемое приложение
- Запустить приложение (в том числе, в режиме отладки)
В чем будем писать исходный код? Текстовый редактор.
Сгодится любой текстовый редактор. Но желательно, с подсветкой синтаксиса. Я привык пользоваться Notepad++ (для справки: я — пользователь Windows). Другой редактор, которым я пользуюсь, но для программирования на платформе .NET, это — Visual Studio Code (или сокращенно — VSCode). В обоих редакторах есть подсветка синтаксиса C/C++ (в VSCode нужно будет установить расширение C/C++ for Visual Studio Code (Preview)).
Исходный код программы HelloWorld
Создайте где-нибудь на своем ПК папку, в которой будут лежать все файлы, необходимые для построения приложения (среди этих файлов будет в частности файл исходного кода, но, возможно, не только он один). На всякий случай: желательно, чтобы путь к папке не содержал пробелов. Папку можно назвать, скажем, helloworld. Создайте в папке текстовый файл (я обычно называю его main.cpp) и скопируйте в него текст программы HelloWolrd:
#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:
Плагин умеет выполнять скрипты. Можно написать некий скрипт, который будет запускать компилятор, передавая ему нужные аргументы командной строки:
Пишем скрипт:
cd "$(CURRENT_DIRECTORY)"
g++ "$(FILE_NAME)" -o $(NAME_PART) -ggdb
NPP_RUN $(NAME_PART)
Сохраняем скрипт:
Устанавливаем галку, чтобы отображалось окошко консоли:
Открываем файл исходного кода (например, наш main.cpp). Далее
Видим в окошке консоли текстовый вывод компилятора. Если программа скомпилировалась, то она еще и запустится.
Настройка 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:
├── main.cpp
└── .vscode
├── c_cpp_properties.json
├── tasks.json
└── launch.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
}
// Задачи, которые можно запускать при помощи меню 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
}
}
]
}
// Настройки для отладки, в частности - путь к отладчику
{
// 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
}
]
}
]
}
Как запустить компиляцию:
Как запустить отладку:
То, что мы таким образом настроили VSCode, позволяет нам скомпилировать один файл исходного кода (main.cpp). А что делать, когда файлов много? VSCode — это текстовый редактор, он не создает файл проекта (.vcproj) как Visual Studio, который работает а-ля makefile, т. е. описывает процесс построения приложения (построение — это компиляция и компоновка). Поэтому я подозреваю, что для построения больших проектов на C++, состоящих из многих файлов исходного кода, вам придется самостоятельно создавать makefile и конфигурировать VSCode для запуска утилиты make.
Резюме
На мой взгляд, для начинающего самый простой путь — установить Visual Studio Community Edition (даже несмотря на большой объем дистрибутива). Вы сразу получаете IDE, и вам не надо ничего настраивать. Ну а для матерых программистов копаться в разных настройках, конфигурациях и командных строках — святое дело.
На этом всё. В следующей заметке надеюсь написать про начало работы с Qt.