Лабораторная работа 0.1 для студентов курса “Основы программирования” 1 курса кафедры ИУ5 МГТУ им Н.Э. Баумана.
Настроить рабочее окружение и C++ тулчейн (набор инструментов), необходимые для выполнения лабораторных работ и домашнего задания в рамках курса по основам программирования.
В данной лабораторной работе будет рассказано как:
Не считая настройки Linux окружения, указания в данной лабораторной работе относительно универсальны и могут применяться также к устройствам под управлением систем семейства Linux и MacOS. В случае необходимости дополнительных консультаций, студентам с такими устройствами следует обращаться к преподавателю.
Для выполнения заданий требуется POSIX совместимое окружение. Это означает, что необходимо пользоваться операционными системами семейства Linux или MacOS.
В Windows 10/11 есть возможность установить специальный слой совместимости, который позволит работать в Linux окружении прямо из оригинальной операционной системы.
Данный слой совместимости называется Windows Subsystem for Linux (WSL).
При желании, вместо WSL можно установить себе какой-нибудь из Linux дистрибутивов второй операционной систем (т.н. дуалбут). В качестве универсального варианта можно использовать Ubuntu 24.04, либо любой другой предпочтительный дистрибутив.
Для установки WSL следует открыть командную строку Windows или PowerShell от имени администратора. Для этого можно:
Либо:
В появившемся окне следует написать:
wsl --install -d Ubuntu-24.04
Данная команда установит WSL и Ubuntu 24.04 в качестве используемой в WSL операционной системы. При желании можно установить другую операционную систему. Получить список доступных для установки дистрибутивов можно следующей командой (более подробно здесь: https://learn.microsoft.com/en-us/windows/wsl/install):
wsl --list --online
Далее необходимо дождаться успешного завершения установки.
Если не возникло никаких ошибок (для этого необходимо прочитать то, что написано в запущенной консоли), то следующим шагом необходимо перезапустить ОС.
После перезагрузки должно автоматически появится окно консоли, в котором начнет отображаться процесс запуска свежеустановленной операционной системы. Если этого не произошло, то можно запустить ОС вручную как обычное приложение, для этого необходимо в поиске найти “Ubuntu 24.04 LTS” и запустить его.
При первом запуске операционная система предложит ввести имя пользователя и пароль. Во время ввода пароля вводимые символы не отображаются. Это стандартное поведение, поэтому нужно просто ввести свой пароль.
После подтверждения пароля вы окажетесь в домашней директории ОС.
В дальнейшем для запуска консоли Linux можно просто открывать соответствующее приложение (для Ubuntu 22.04 это “Ubuntu 22.04 LTS”) или запускать через консоль Windows в случае необходимости.
Каждый раз запуская консоль Linux, вы (как правило) оказываетесь в домашней директории. Чтобы понять, в какой конкретно директории вы находитесь, можно посмотреть на активную строку консоли, слева будет указана следующая информация в таком формате:
username@pcname:currentdir$
Где username - это ваше имя пользователя, pcname - имя вашего компьютера, currentdir - та директория, в которой вы сейчас находитесь.
По умолчанию домашняя директория обозначается алиасом (псевдонимом) ~.
Корнем файловой системы в Linux является директория /. В ней находятся директории, необходимые для работы операционной системы. Домашняя директория находится по следующему пути:
/home/username/
Где username - это ваше имя пользователя.
Из-под операционной системы в WSL можно получить доступ к файлам и директориям, расположенными в Windows. Для этого необходимо перейти в директорию /mnt, где можно увидеть смонтированные в эту директорию разделы диска.
Например, чтобы перейти из Ubuntu под WSL на диск с меткой C, нужно перейти по следующему пути:
/mnt/c
В Windows получить доступ к файлам можно через проводник: слева будет раздел с названием Linux, в котором будет имя установленного дистрибутива, который ведет в корень файловой системы установленной ОС. Можно также в адресной строке проводника ввести следующий адрес:
\\wsl.localhost
В таком случае откроется список установленных дистрибутивов, из которого можно получить доступ к корню соответствующей файловой системы.
VS Code - это универсальный редактор кода с поддержкой множества пользовательских расширений. Он бесплатный и находится в открытом доступе, поэтому является довольно оптимальным вариантом для работы с C++.
При желании можно установить другой редактор кода или полноценную IDE в зависимости от предпочтений. Однако необходимым условием является поддержка работы в WSL, а также возможность работать в консоли напрямую для сборки приложения.
Установить VS Code можно с официального сайта. Установите его как обычное приложение под Windows (Linux/MacOS) в любое удобное место.
Запустите VS Code. Откройте File -> Preferences -> Settings (ctrl+,). Необходимо будет поставить галочки рядом с тремя настройками.
Названия данных настроек нужно ввести в поисковую строку.
Слева найдите панель управления и нажмите на ней на кнопку расширений (extensions), либо нажмите ctrl+shift+X. В поисковой строке введите WSL. Установите это расширение.
После этого нажмите ctrl+p и введите следующую команду:
> WSL: Connect to WSL
Должно открыться новое окно, подключенное к WSL. Слева снизу должно быть написано WSL: Ubuntu-24.04.
Откройте терминал внутри VS Code (ctrl+`). Должна открыться консоль Ubuntu (или другой установленной ОС) с расположением в домашней директории ОС. Чтобы убедиться, что вы точно находитесь под Linux, введите следующую команду.
lsb_release -a
Убедитесь, что вывод соответствует следующему:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble
В целом, можно работать и без расширений, но они помогут вам упростить разработку и написание кода на C++
Откройте панель расширений (ctrl+X). Найдите и установите следующие расширения:
Подробнее про каждое расширение можно прочитать на странице его описания.
Откройте консоль установленного дистрибутива Linux (отдельно или в VS Code) и введите следующую команду:
sudo apt update
Введите запрашиваемый пароль, который указывали при установке системы. Дождитесь выполнения, затем введите:
sudo apt install build-essential
Подтвердите выполнение, написав в консоли “y” (без кавычек) и нажав enter. Данная команда установит базовый набор программ и библиотек, необходимых для написания программ на C++. В частности, будет установлен компилятор GCC.
В рамках данного курса предполагается использование компилятора GCC, но вы также можете поставить себе Clang.
Проверьте, что GCC установился успешно:
gcc --version
В ответ вы должны получить следующий вывод:
gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Поставьте gdb - отладчик для C++ (также потребуется подтверждение установки. Далее этот пункт будет опускаться, поэтому читайте внимательно вывод запущенной вами команды: там написано, требуется ли подтверждение дальнейшего действия или нет):
sudo apt install gdb
Убедитесь, что gdb успешно установлен:
gdb --version
В ответ вы должны получить следующий вывод:
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Далее необходимо поставить форматтер clang-format и статический анализатор clang-tidy.
Для этого сначала необходимо добавить подпись для соответствующего репозитория с инструментарием LLVM (более подробно здесь - https://apt.llvm.org/):
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
Затем добавить сам репозиторий:
sudo add-apt-repository deb http://apt.llvm.org/noble/ llvm-toolchain-noble-18 main
Затем снова запустить следующую команду:
sudo apt update
Затем:
sudo apt upgrade
Наконец, установите непосредственно clang-format:
sudo apt install clang-format
И clang-tidy:
sudo apt install clang-tidy
Убедитесь, что clang-format и clang-tidy успешно установлены, запустив их с флагами --version (должна быть версия 18 или выше).
Гайды для работы с консолью в Linux:
Консоль, как и проводник, предоставляет вам точку доступа к файловой системе. С помощью консоли можно гибко и универсально работать с файловой системой, запускать команды, консольные (и не только) приложения и выполнять с помощью них различные действия.
Иногда консоль - это единственный способ доступа к системе. Кроме того, консоль позволяет с помощью относительно простых действий делать сложные вещи, например, создать одновременно миллион директорий и т.п.
Как правило, команды и консольные приложения принимают аргументы и флаги. Для большинства распространенных команд и приложений существует флаг –help, он позволяет получить справку о том как работать с этой командой/приложением.
someapp --help
Как уже было сказано, посмотреть в какой конкретно директории вы сейчас находитесь можно в активной строке консоли (слева от знака “$”.
Также текущее местоположение можно узнать следующей командой:
pwd
Перемещение по файловой системе осуществляется с помощью команды cd. Данная команда работает как с относительными, так и с абсолютными путями.
Абсолютный путь - это такой путь, который начинается от корня файловой системы:
/home/username
Относительный путь - путь относительно той директории, в которой вы сейчас находитесь:
Чтобы переместиться внутрь директории по относительному пути, достаточно просто указать часть пути относительно текущей директории. Например, если текущая директория - ~ (домашняя) и в ней есть директория examples, то достаточно написать следующую команду:
cd examples
Чтобы переместиться на уровень выше относительно текущий директории, используется “..”. Например, если текущая директория /home/username/examples, то чтобы перейти на уровень выше надо написать следующую команду:
cd ..
Чтобы перейти на несколько уровней выше нужно разделять переходы слешами. Например, таким образом можно перейти на 3 уровня выше по файловой системе:
cd ../../..
Для просмотра содержимого текущей директории используется команда ls. Она выводит список всех нескрытых файлов и директорий, находящихся в текущей директории.
Скрытые файл или директория в Linux - это любой файл или директория, название которых начинается с “.”. Например, .data.txt или .somedir.
Чтобы показать содержимое директории вместо со скрытыми файлами, нужно использовать флаг -a:
ls -a
Один из способов создания нового файла - это команда touch. Она создаст файл с заданным названием в текущей директории. Например, данная команда создаст файл file.txt:
touch file.txt
Создать директорию можно с помощью команды mkdir. Ей можно указать либо абсолютный, либо относительный путь. Например, данная команда создаст директорию d в текущей директории:
mkdir d
Чтобы создавать вложенные директории, необходимо использовать флаг -p. Следующая команда создаст в текущей директории директорию a, в которой создаст директорию b:
mkdir -p a/b
Чтобы удалить файл или директорию используется команда rm. Данная команда удалит файл file.txt в текущей директории:
rm file.txt
Для удаления директории необходимо использовать флаг -r. Вместе с директорией удалится все ее содержимое. Например, эта команда удалит директорию dir из текущей директории:
rm -r dir
Откройте VS Code. В терминале с помощью команды mkdir создайте какую-нибудь директорию, в которой будете писать код (с любым названием).
Нажмите на панели управления или в меню File, или через последовательное нажатие ctrl+K ctrl+O пункт “Открыть папку” (Open Folder). Укажите полный (абсолютный) путь к той папке, которую вы создали. В появившемся контекстном окне выберите “Да, я доверяю авторам” (Yes, I trust the authors).
Создайте в директории через VS Code или через консоль новый файл с названием main.cpp (либо любым другим названием).
Скопируйте туда следующий код (после компиляции данный код будет выводить в консоль "Hello, World!"):
#include <iostream>
int main(int, char**) {
std::cout << "Hello, World!" << std::endl;
return 0;
}
Сохраните файл и откройте консоль (в VS Code или отдельно). Убедитесь, что находитесь в той же директории, в которой находится файл main.cpp. Для этого можно воспользоваться командами pwd и ls. Затем запустите компилятор (в консоли) и подайте ему на вход файл main.cpp в качестве аргумента:
g++ main.cpp
В текущей директории должен появиться исполняемый файл a.out. Запустите его следующим образом:
./a.out
Убедитесь, что в консоли вывелось “Hello, World!”.
Затем скомпилируйте исполняемый файл следующим образом (обратите внимание, что в Linux у исполняемых файлов нет расширения по умолчанию. В Windows, например, исполняемые файлы имеют расширение .exe):
g++ -std=c++20 -Wall -Werror -Wextra -Wpedantic main.cpp -o hello_world
Где:
Использование данных флагов обязательно при сдаче всех работ в рамках курса.
Запустите исполняемый файл и убедитесь, что вывод не поменялся:
./hello_world