Введение
Добрый день. Этот материал рассчитан на людей, будущих программистов, которые только начинают разбираться в программировании под ОС Linux. Я попробую здесь показать прямое руководство к действию на примере тех простых инструментов, которые использовал некогда сам при изучении Си в процессе знакомства с Linux. На самом деле, с теми или иными поправками, это руководство можно использовать в большинстве дистрибутивов. Руководство однозначно подходит для всех deb-based дистрибутивов.
С установкой ОС, как я полагаю, проблем у Вас уже не возникло. Этому процессу посвящены просто тысячи статей на профильных сайтах.
Итак: у Вас сейчас установлен дистрибутив ОС, как говорится, "из коробки". Перед глазами пособие для разработчика/учебник/просто_хорошая_книга по "Языку программирования Си". И никакой вменяемой, полноценной подробной информации о том, как же собственно откомпилировать и выполнить, написанный в книге, исходный код. Быстрый осмотр тематических ресурсов уже показал Вам, что, необходимо установить компилятор Си, запустить его с нужными параметрами и потом запустить компилированный бинарный код. Примерно с этого момента мы и начнём.
Установка компилятора
Я имею ввиду, что Вы скорее всего (бывший) пользователь ОС Windows и действия в чёрном/синем окошке при помощи клавиатуры оканчивались где-то на команде ping, кажутся неким таинством. Однако отмечу, что всё банально просто и текстовой интерфейс предоставляет намного более гибкие возможности (скорее всего Вы неоднократно Вы слышали это ранее). Приступим:
Я подразумеваю, что с понятием компиляции и о том что такое компилятор Вас уже познакомила правильная книга.
На этом этапе всё будет очень быстро и просто. Открываем терминал и пишем:
sudo apt install gcc
(На всякий случай: вставка в gnome-terminal ctrl+shift+v)
Сразу поясню, что текст слева от курсора - это приглашение командного интерпретатора и оно выглядит следующим образом:
ИМЯ_ПОЛЬЗОВАТЕЛЯ@ИМЯ_КОМПЬЮТЕРА:ТЕКУЩИЙ_КАТАЛОГ$
Далее я буду указывать только команды интерпретатору без приглашения.
Данная строка "говорит" интерпретатору: "от имени суперпользователя запустить менеджер пакетов для установки пакета gcc".
Система попросит Вас ввести пароль суперпользователя и приступит к установке компилятора.
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Предлагаемые пакеты:
gcc-multilib gcc-doc
Следующие НОВЫЕ пакеты будут установлены:
gcc
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 44 пакетов не обновлено.
Необходимо скачать 5 208 B архивов.
После данной операции объём занятого дискового пространства возрастёт на 51,2 kB.
Пол:1 http://ru.archive.ubuntu.com/ubuntu focal/main amd64 gcc amd64 4:9.3.0-1ubuntu2 [5 208 B]
Получено 5 208 B за 0с (34,6 kB/s)
Выбор ранее не выбранного пакета gcc.
(Чтение базы данных … на данный момент установлено 371769 файлов и каталогов.)
Подготовка к распаковке …/gcc_4%3a9.3.0-1ubuntu2_amd64.deb …
Распаковывается gcc (4:9.3.0-1ubuntu2) …
Настраивается пакет gcc (4:9.3.0-1ubuntu2) …
Обрабатываются триггеры для man-db (2.9.1-1) …
Если же он уже установлен, то менеджер пакетов apt
просто укажет на это примерно следующим образом:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Уже установлен пакет gcc самой новой версии (4:9.3.0-1ubuntu2).
Установка редактора
Обычно с дистрибутивом Ubuntu поставляется весьма интересный текстовой редактор gedit
. Однако в других дистрибутивах возможно придётся установить этот редактор:
sudo apt install gedit
Создание файла с исходным кодом
Теперь пришло то самое время нашего классического "hello world"! Давайте сделаем это в стиле linux. Просто наберите в консоли:
gedit ~/hello_world.c
Более подробно Вы обязательно прочитайте в профильных ресурсах и в документации, я только отмечу, что символ "тильда" возвращает полный путь к домашнему каталогу пользователя ОС. Соответственно будет создан файл в вашем домашнем каталоге с указанным именем.
И далее наш программный код на языке Си в редакторе:
#include "stdio.h"
int main()
{
printf ("\nHello world)\n");
for (int c=0; c<10;c++)
{
for (int i =0;i<c;i++)
printf("#");
printf ("\n");
}
return 0;
}
(Стоит отметить, что в редакторе gedit есть подсветка синтаксиса для различных языков программирования. Переключить режимы подсветки можно в нижней части окна редактора.)
Не забываем сохранить изменения нажатием ctrl+s. Обратите внимание, что вопросов об имени файла не последовало, так как имя было уже указано параметром при запуске редактора из командной строки терминала.
Компиляция и запуск
Закрываем окно редактора нажатием Alt+F4 и запустим же то сокровенное ради чего все тут и собрались:
gcc ./hello_world.c
И в ответ только новое приглашение. В отличие от стиля в ОС Windows, когда консоль, жутко подробно по-умолчанию, комментирует выполняемые действия - большинство программ в ОС семейства *nix сообщают только об исключительных ситуациях, ошибках и тому подобных вещах. То есть если "в ответ тишина" - то всё прошло хорошо.
Теперь в домашнем каталоге у нас появился файл a.out - он и есть файл с исполнимым кодом.
Для запуска этого файла на исполнение - назначим ему атрибут: "исполнимый":
chmod +x a.out
и теперь запустим получившееся приложение:
./a.out
(Для запуска исполнимого файла интерпретатору требуется указать полный путь к файлу. Как в случае с "тильдой" символ "точка" возвращает полный путь к текущему каталогу. В данном конкретном случае правомерно так же запустить через ~/a.out
Это не имеет значения здесь, так как файл создан в домашнем каталоге пользователя.)
И мы получаем вывод в терминале:
Hello world)
#
##
###
####
#####
######
#######
########
#########
Для выполнения всех повторных действий: изменение кода и снова компиляция, - Вы можете не вводить все эти команды каждый раз заново, а использовать стрелки вверх и вниз, для быстрого выбора команд из истории. И, кстати, вывод списка истории всех введённых команд можно выполнить командой (на самом деле программой) history
.
Минутка автоматизации
Теперь приступим к очень интересному моменту связанному с творчеством в духе *nix. Каждый раз вводить много скучных команд неинтересно, возможно, даже вредно. Мы расширим функционал редактора gedit и доработаем его "напильником" до состояния примитивной среды разработки: запустим gedit и откроем меню параметров,
где на вкладке "Расширения" добавляем "Внешние инструменты"
И затем, из того же главного меню gedit выбираем "Управление внешними инструментами".
Как Вы уже поняли - здесь можно выполнить доработку функциональности текстового редактора. Создадим новый инструмент: "Компиляция и запуск", В качестве вывода используем нижнюю область редактора. Инструмент назначим для файлов C и C++. Назначим клавишу F5 (дело вкуса) на применение инструмента и собственно сам код инструмента в виде скрипта bash:
#!/bin/bash
gcc -o a.out $GEDIT_CURRENT_DOCUMENT_NAME
chmod +x ./a.out
./a.out
rm ./a.out
Разберёмся в том, что тут происходит:
#!/bin/bash
- указание командного интерпретатора для выполнения скрипта.
gcc -o a.out $GEDIT_CURRENT_DOCUMENT_NAME -
здесь мы запускаем компилятор, где в параметре -o указываем имя выходного файла. Пускай он будет таким же как и по-умолчанию.
$GEDIT_CURRENT_DOCUMENT_NAME
- через эту переменную gedit передаёт имя файла.
Дальше Вы уже знаете - назначение атрибута "исполнения", запуск файла и потом:
rm ./a.out
- удаление созданного исполнимого файла.
Попробуем инструмент в деле:
Теперь можно продолжать изучать пособие для разработчика/учебник/просто_хорошую_книгу по "Языку программирования Си" на практике.
Заключение
На самом деле в ОС Linux полно возможностей по доработке и использованию различного ПО. Само ПО является максимально гибким. Необязательно использовать предложенные мною средства, скорее методы, разработки.
В дальнейшем Вам обязательно понадобятся более серьёзные средства. А на первое время Вы можете дополнительно посмотреть другие редакторы, вплоть до больших и серьёзных сред разработки. Однако обязательно обратите внимание на редактор vim.