Создание приложений linux
Инструменты ОС Linux для разработчиков приложений для ОС Windows. Часть 8. Разработка GUI приложений
Данный цикл статей, в основном, предназначен для разработчиков драйверов (модулей ядра), обеспечивающих поддержку специфических аппаратных средств или расширяющих набор системных утилит для диагностики и управления. Поэтому, все предыдущие статьи были сфокусированы на использовании языка программирования С, так как сама система Linux (как ядро, так и большая часть GNU утилит) написаны на языке C (правда ядро содержит незначительные включения ассемблерного кода).
Однако и для прикладных программистов ОС Linux предоставляет все возможности, доступные в области разработки ПО. В данной статье мы рассмотрим некоторые инструменты ОС Linux для создания приложений с графическим интерфейсом пользователя.
Создание приложений с графическим интерфейсом пользователя
Создание приложений, взаимодействующих с пользователем посредством графического интерфейса (GUI приложения), относится к самостоятельному классу задач и даже к отдельной области программирования. В подобный список автономных классов задач из области разработки ПО можно, например, выделить:
- программы, реализующие алгоритмы цифровой обработки сигналов (DSP);
- приложения для обработки аудио-потоков (пакеты: sox, ogg,.speex и другие);
- проекты IP-телефонии, реализации SIP протокола и т.д.;
К подобным независимым областям относится и разработка GUI приложений. Кроме собственной специфики в виде доступных инструментов и средств, необходимо учесть ещё одно принципиальное различие — диаметрально противоположное отношение к GUI в операционных системах семейства Windows и в UNIX (и в Linux, как его частный вид):
В ОС Windows каждое приложение относится к GUI-приложениям, так как неотъемлемым атрибутом любого приложения в Win32 API (низкого уровня) является главное окно приложения, и само приложение строится вокруг этого окна. Операционная система регистрирует классы окон и в дальнейшем соотносит с ними конкретные приложения. Обычное приложение, взаимодействующее с пользователем, просто не может существовать без окна, и с этим были связаны первоначальные проблемы с реализацией консольных (терминальных) приложений в Windows.
На платформе UNIX наблюдается противоположная картина, когда первичным является приложение, по умолчанию консольное (текстовое), и вся графическая система не является составной частью операционной системы, а представлена в виде надстройки пользовательского уровня. Чаще всего в качестве такой графической надстройки используется X11 (в реализации Xorg или X11R5), но это не обязательно, так как существуют и другие графические системы, например, Qwindow, и впоследствии Photon в операционной системе QNX, сосуществующие там одновременно с X11.
Показательно в этом смысле то, что вся оригинальная часть реализации X11, т.е. взаимодействие с аппаратурой видеоадаптеров, устройствами ввода и т.д., работает в пространстве пользователя, а не в привилегированном режиме ядра (супервизора). Отдельные реализации (видеосистемы NVIDIA или AMD Radeon) могут быть реализованы в режиме ядра (как модули), но подобные разработки не относятся к X11, и создаются в основном для решения вопросов, связанных с производительностью.
Поэтому из-за данной специфики, разработка GUI-приложений для ОС UNIX (Linux) принципиально отличается, за счёт того что:
- GUI-приложения функционируют через промежуточные слои (библиотеки) пользовательского уровня;
- Благодаря размещению графической подсистемы на пользовательском уровне, для программистов предлагается широкий спектр альтернативных инструментов (библиотек), практически равнозначных и конкурирующих друг с другом: Xlib, GTK+, Qt, wxWidgets и т.д.
- базовый API для работы с X11 предоставляет библиотека Xlib, а все другие фреймворки пользовательского интерфейса используют уже её функционал, как показано на рисунке 1.
- разработчик может выбирать уровень, на котором будет располагаться его приложение, и инструменты, которые он предполагает использовать, начиная от Xlib и выше (хотя библиотека Xlib расположена слишком «глубоко» и работа с ней требует выполнения множества рутинных операций).
Рисунок 1. Архитектура GUI-библиотек, присутствующих в ОС Linux
Примеры использования различных GUI-библиотек
В силу сказанного, все GUI-приложения для ОС Linux, независимо от инструментов, использовавшихся для их создания, имеют абсолютно одинаковую структуру. Далее мы сравним код нескольких простейших GUI приложений, разработанных с помощью различных инструментов. Основной целью подобной демонстрации будет знакомство с принципами использования различных библиотек и команд для компиляции и сборки GUI-приложений, чтобы предоставить читателю возможность в дальнейшем создавать собственные GUI приложения. Полный код примеров, представленных в данной статье, можно найти в архивах, представленных в разделе «Материалы» для скачивания» (для каждой библиотеки используется собственный каталог в примерах).
Листинг 1. Создание GUI-приложения средствами Xlib (каталог Xlib):
Соберём и запустим приложение, как показано ниже:
Рисунок 2. Простейшее Xlib-приложение.
Листинг 2 Создание GUI-приложения средствами GTK+ (каталог GTK+):
Как и в прошлый раз соберём и запустим приложение:
Рисунок 3. Простейшее GTK+приложение
Библиотека Qt предполагает написание приложений на языке С++ и имеет богатый набор инструментов, например, для построения сценария сборки приложения. Сначала мы создадим в рабочем каталоге (изначально пустом) файл исходного кода приложения, как показано в листинге 3. Полный код примера можно найти в архиве, каталог Qt в разделе «Материалы для скачивания».
Листинг 3. Пример Qt-приложения (файл index.cc)
А теперь для сборки нашего проекта выполним следующие команды:
Таким способом, из имеющихся файлов с исходным кодом был сгенерирован файл проекта и, затем, сценарий сборки (Makefile). Остаётся выполнить сборку проекта и изучить опции, которые использовались для компиляции и сборки:
Рисунок 4. Пример Qt-приложения
Листинг 4. Создание GUI-приложения средствами библиотеки wxWidgets (каталог wxWidgets)
Как обычно соберём и запустим приложение:
Рисунок 5. Пример wx-Widgets приложения
Библиотека GLUT OpenGL Utility Toolkit, как следует из названия, использует в приложения средства технологии OpenGL, которая требует определённой поддержки со стороны видеооборудования.
Листинг 6. Пример GLUT-приложения (каталог glut)
Соберём и запустим приложение:
Рисунок 6. Пример GLUT-приложения
Заключение
Хотя все представленные примеры и содержат только базовую функциональность, но они позволяют сравнить поведение различных GUI-библиотек в X11 и могут послужить отправной точкой для разработки более функциональных GUI-приложений. Мы рассмотрели только несколько GUI-технологий, доступных в X11, хотя большинство из них являются кросс-платформенными и могут применяться и в других операционных системах. Все перечисленные технологии и другие, существующие в эко-системе Unix/Linux, взаимно заменимы и даже взаимно дополняемые.
В данной статье мы рассмотрели примеры простых GUI-приложений, но сложные визуальные интерфейсы для таких приложений обычно создаются не путём непосредственного кодирования, а за счёт использования интегрированных сред разработки (IDE) и их «мастеров» (визардов) для визуальной разработки пользовательского интерфейса.
Визуальные среды программирования для Linux
Многие начинающие кодеры бояться
программирования в Linux — нет виндовой простоты
и наглядности. Однако и для Linux существует
множество визуальных средств
программирования, и это не только клон Delphi.
Конечно, они не могут стать полноценной
заменой той же Visual Studio, однако вполне
помогают ускорить процесс разработки
программ.
NetBeans
Одна из лучших IDE сред. Предназначена для
работы с Java, с ее помощью можно
разрабатывать не только кросс-платформенные
Java программы, но и web-приложения, web-сервисы и
клиентов для них, J2ME программы и т.п. Может
работать в Windows, Linux, MacOS. IDE можно расширять
различными плагинами и аддонами, кои можно
найти на сайте. При этом — все бесплатно, то
есть на хаялву! В общем — бесспорный номер
один.
QT / KDevelop Designer
Еще одна мощная среда разработки на
платформе KDE и Gnome. Кросс-платформенные C++
приложения выходят только в путь. Для
некоммерческих программ Qt можно
использовать бесплатно, существует
практически для всех дистрибутивов.
Gambas
Клон Visual Basic, причем не только в оформлении,
но и в конструкциях языка . Идеальное
средство для VB программистов, желающих
перейти на Linux. Простой и удобный интерфейс.
Доступ ко всем главным базам данным — MySQL,
PostgreSQL и т.д. Работает практически на всех
дистрибутивах.
Nvu
WYSIWYG редактор для создания web-страниц. Во
многом напоминает редактор Macromedia или все
тот же FrontPage. Поддерживает автоматическую
работу с сайтом по FTP.
Eric
Python и Ruby IDE среда, делающая
программирование на языке довольно простым
и увлекательным. Написанная собственно на
Python.
Eclipse
Eclipse — вообще не IDE, а целая платформа для
различных приложений. В стандартную
поставку входят дополнительные плагины для
поддержки языка Java (JDT) и разработки
плагинов для Eclipse (PDE — Plugin Development Environment). Для
работы с другими языками должны быть
установлены специальные плагины — в Eclipse
можно работать практически на любом
доступном языке программирования. Еще одно
преимущество тоже относится к
расширяемости: гигантское количество
утилит (особенно для Java) теперь
поставляется и в виде плагинов для Eclipse,
например, Ant, JavaDoc, JUnit, JDepend, Check Style, Subversion.
Значит, нам не придется отказываться от
своей системы контроля версий, от своей
программы проверки качества кода и т.п.
Третье преимущество — то, что Eclipse является
кросс-платформенной средой, то есть
существуют версии для различных
операционных систем (чего не может
позволить себе та же Visual Studio).
Более подробно о среде ты можешь
прочитать в нашем Спеце: http://www.xakep.ru//magazine/xs/065/048/1.asp
JDeveloper
Платформа от Oracle — не с открытым кодом,
однако все равно бесплатная. Как ясно из
названия используется все та же кросс-платформенная
Java. Использует для работы Sun JDK, так что сама
Oracle никаких претензий к создаваемым
программам по идее иметь не будет.
Planner
Ну и наконец визуальная среда управления
проектами для Gnome Desktop. Не менее полезная
программа для программистов чем IDE.
Разработка
CudaText
CudaText — редактор кода. Поддерживает подсветку синтаксиса, отображение дерева кода и другие необходимые функции.
Notepadqq
Notepadqq — простой редактор кода для программистов, созданный по мотивам Notepad++.
VSCodium
VSCodium — форк программы Visual Studio Code с открытым исходным кодом и без телеметрии.
SmartGit
SmartGit — графический клиент для системы контроля версий Git. SmartGit позволяет выполнять все основные действия при работе с Git, включая мерджинг и ребейзинг.
Visual Studio Code
Visual Studio Code — функциональный редактор кода от компании Microsoft.
Zeal — приложение для программистов и разработчиков, которое позволяет скачивать руководства, документацию, инструкции и использовать их без использования интернета.
Eric — интегрированная среда разработки для языков программирования Python и Ruby.
Atom — современный, удобный, функциональный редактор кода. Имеет встроенный менеджер пакетов (плагинов) для расширения возможностей.
Pick — простая утилита для подбора цвета, позволяет получить значение цвета в любой области экрана и сохранять его в удобном списке.
Code Blocks
Code Blocks — интегрированная среда разработки (IDE) для C, C++ и Fortran. Code Blocks обладает всеми необходимыми функциями для разработки проектов.
Eclipse
Eclipse — интегрированная среда разработки (IDE). Имеет модульную архитектуру, что дает возможность существенно расширять и изменить функциональность среды под свои нужды.
Brackets
Brackets — бесплатный редактор для web-дизайнеров и разработчиков. Преимущественно предназначен для написания и редактирования HTML, CSS и JavaScript кода.
Создание графических приложений
Цилюрик О.И.
Настоящая статья является дополнением к книге «Инструменты Linux для Windows-программистов». Это не описание как делать GUI приложения в Linux, это описание того, как ПРИСТУПИТЬ к созданию графических приложений в Linux, и, хотелось бы надеяться что это прозвучит — чем принципиально программирование графики в Linux отличается от того же занятия в Windows. Главным требованием здесь была простота. Сделав простейший шаблон GUI прложения, дальше двигаться уже гораздо проще. Кроме того, все эти простейшие приёмы программирования показаны сравнительно: на основе основных графических технологий (библиотек), используемых в UNIX.
Все примеры к тексту вы можете скачать в виде общего архива.
Создание приложений, взаимодействующих с пользователем посредством графического интерфейса (GUI приложений), является частным классом задач, отдельной областью программирования. Из числа других подобных областей приложения можно было бы привести, как примеры:
- реализация алгоритмов цифровой обработки сигналов (DSP): быстрые спектральные преобразования (FFT и другие), вэйвлеты, авторегрессионные разложения. ;
- обработка аудио-потоков (пакеты: sox, ogg, speex и другие);
- задачи IP-телефонии, SIP протокола, реализация разнообразных программных SoftSwitch;
Это сравнительный ряд автономных областей развития приведен как пример таких частных классов, одним из которых является и разработка GUI приложений. И как частный класс, со своей спецификой инструментов и средств, он не заслуживал бы отдельного упоминания, если бы не одно обстоятельство — принципиально отличающееся, диаметрально противоположное отношение к GUI в операционных системах семейства Windows и в UNIX (и в Linux, как его частный вид):
- В Windows каждое приложение является принципиально GUI, неотъемлемым атрибутом любого приложения в Win32 API (низкого уровня) является главное окно приложения, уже само приложение «вяжется» вокруг его главного окна. Операционная система регистрирует классы окон и уже далее к ним соотносит конкретные приложения. Не может существовать приложения (взаимодействующего с пользователем, не системные службы) без окна, с этим были связаны и первоначальные сложности Windows в реализации консольных (терминальных) приложений.
- в UNIX картина принципиально обратная: первичным является приложение, которое, по умолчанию, является консольным, текстовым, вся графическая система не является составной частью операционной системы, а является надстройкой пользовательского уровня. Чаще всего такой графической надстройкой является X11 (в реализации Xorg или X11R5), но и это не обязательно: практиковались и другие графические системы, хороший пример тому графические системы Qwindow, а затем Photon в операционной системе QNX, сосуществующие там одновременно с X11.
- Показательно в этом смысле то, что вся оригинальная часть реализации X11 работает в пространстве пользователя, не в привилегированном режиме ядра (супервизора): работа с аппаратурой видеоадаптеров, устройствами ввода и другое. Отдельные реализации (видеосистемы NVIDIA или ATI Radeon) могут быть реализованы в режиме ядра (модули), но это а) сторонние относительно X11 разработки, и б) решение вопросов только производительности.
Из-за обозначенной специфики, разработка GUI приложений в UNIX (Linux) принципиально отличается:
- вся работа GUI приложений ведётся через промежуточные слои (библиотеки) пользовательского уровня;
- из-за того, что это ординарный пользовательский уровень, для разработчика предлагается широкий спектр альтернативных инструментов (библиотек), практически равнозначных, и конкурирующих друг с другом: Xlib, GTK+, Qt, wxWorks и многие другие.
- базовый API работы с X11 предоставляет Xlib, все другие используют уже её функционал, как это показано на рисунке.
- разработчик имеет возможность широкого выбора тех уровня и инструментов, которые он предполагает использовать, начиная от Xlib и выше (хотя уровень Xlib и слишком низок и работа с ним громоздкая).
Из-за названной специфики GUI приложений в Linux, все они, независимо от используемых средств создания, имеют абсолютно сходную структуру. Рассмотрим, для сравнения, код нескольких простейших GUI приложений, подготовленных с помощью различных инструментов. Важнейшей задачей такой экспозиции будут команды компиляции и сборки, чтобы, исходя из таких примеров, показать возможность начать создавать свои собственные GUI приложения.
Средства Xlib (архив Xlib.tgz ):
Средства GTK+ (архив GTK+.tgz ):
$ gcc gtk.c -o gtk `pkg-config —cflags —libs gtk+-2.0`
Средства Qt (архив Qt.tgz ):
Средства Qt предполагают написание приложений на языке С++, и имеют развитый инструментарий, в частности, построения сценария сборки приложения. Создадим в рабочем каталоге (изначально пустом) файл исходного кода приложения с произвольным именем:
Теперь проделываем последовательно:
Исходя из «подручных» файлов исходных кодов, у нас сгенерировался файл проекта и, далее, сценарий сборки ( Makefile ). Далее проделываем традиционную сборку, а заодно и посмотрим опции компиляции и сборки, которые нам сгенерировал проект:
g++ -c -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector —param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables
g++ -o Qt index.o -L/usr/lib/qt-3.3/lib -lqt-mt -lXext -lX11 -lm
index.cc index.o Makefile Qt Qt.pro
Средства wxWidgets (архив wxWidgets.tgz):
$ g++ simple.cc `wx-config —cxxflags` `wx-config —libs` -o simple
Средства GLUT (архив glut.tgz):
OpenGL Utility Toolkit, как и следует из названия, это средства использования технологии OpenGL в приложениях, которая требует определённой поддержки со стороны видео оборудования.
$ gcc glut.c -o glut -lX11 -lglut
То, что показано выше, это фактически не приложения, а скелеты приложений, но они позволяют: а) сравнить подобие всех GUI технологий в X11, и б) быть отправной точкой для сборки более содержательных GUI приложений. Показано только несколько GUI технологий, применяемых в X11 (большинство из них являются кросс-платформенными, и применимы в большинстве существующих операционных систем). Каждая из этих технологий, а названы только немногие из значительно большего числа, присутствующих в UNIX, могут быть полной альтернативой любой другой из этого же ряда, они взаимно заменимы, и даже взаимно дополняемые.
В данной статье были показаны образцы кода GUI приложений. Естественно, визуальные образы таких приложений строятся не путём непосредственного кодирования, а при использовании некоторых визуальных построителей, в составе тех или иных интегрированных средств разработки (IDE).
Программирование под Linux
Все действия в операционной системе выполняются с помощью программ, поэтому многим новичкам интересно не только использовать чужие программы, а писать свои. Многие хотят внести свой вклад в кодовую базу OpenSource.
Это обзорная статья про программирование под Linux. Мы рассмотрим какие языки используются чаще всего, рассмотрим основные понятия, а также возможности, разберем как написать простейшую программу на одном из самых популярных языков программирования, как ее вручную собрать и запустить.
1. На чем пишут программы?
Исторически сложилось так, что ядро Unix было написано на языке Си. Даже более того, этот язык был создан для написания ядра Unix. Поскольку ядро Linux было основано на ядре Minix (версии Unix), то оно тоже было написано на Си. Поэтому можно сказать, что основной язык программирования для Linux это Си и С++. Такая тенденция сохранялась на протяжении долгого времени.
А вообще, писать программы для Linux можно почти на любом языке начиная от Java и Python и заканчивая С# и даже Pascal. Для всех языков есть компиляторы и интерпретаторы. Писать программы на С++ сложно, а Си многими уже считается устаревшим, поэтому множество программистов используют другие языки для написания программ. Например, множество системных инструментов написаны на Python или Perl. Большинство программ от команды Linux Mint, установщик Ubuntu и некоторые скрипты apt написаны на Python. Множество скриптов, в том числе простые скрипты оптимизации написаны на Perl. Иногда для скриптов используется Ruby. Это скрипты OpenShift или, например, фреймворк Metasploit. Некоторые разработчики кроссплатформенных программ используют Java. Но основные компоненты системы написаны все же на Си.
Мы не будем рассматривать основы Си в этой статье. Си — сложный язык и вам понадобится прочитать как минимум одну книгу и много практиковаться чтобы его освоить. Мы рассмотрим как писать программы на Си в Linux, как их собирать и запускать.
2. Библиотеки
Естественно, что если вам необходимо вывести строку или изображение на экран, то вы не будете напрямую обращаться к видеокарте. Вы просто вызовете несколько функций, которые уже реализованы в системе и передадите им данные, которые нужно вывести на экран. Такие функции размещаются в библиотеках. Фактически, библиотеки — это наборы функций, которые используются другими программами. В них находится такой же код, как и в других программах, разница лишь в том, там необязательно присутствие функции инициализации.
Библиотеки делятся на два типа:
- Статические — они связываются с программой на этапе компиляции, они связываются и после этого все функции библиотеки доступны в программе как родные. Такие библиотеки имеют расширение .a;
- Динамические — такие библиотеки встречаются намного чаще, они загружены в оперативную память, и связываются с программной динамически. Когда программе нужна какая-либо библиотека, она просто вызывает ее по известному адресу в оперативной памяти. Это позволяет экономить память. Расширение этих библиотек — .so, которое походит от Shared Object.
Таким образом, для любой программы на Си нужно подключать библиотеки, и все программы используют какие-либо библиотеки. Также важно заметить, на каком языке бы вы не надумали писать, в конечном итоге все будет сведено к системным библиотекам Си. Например, вы пишите программу на Python, используете стандартные возможности этого языка, а сам интерпретатор уже является программой на Си/С++, которая использует системные библиотеки для доступа к основным возможностям. Поэтому важно понимать как работают программы на Си. Конечно, есть языки, вроде Go, которые сразу переводятся на ассемблер, но там используются принципы те же, что и здесь. К тому же системное программирование linux, в основном, это Си или С++.
3. Процесс сборки программы
Перед тем как мы перейдем к практике и создадим свою первую программу, нужно разобрать как происходит процесс сборки, из каких этапов он состоит.
Каждая серьезная программа состоит из множества файлов, это файлы исходников с расширением .c и заголовочные файлы с расширением .h. Такие заголовочные файлы содержат функции, которые импортируются в программу из библиотек или других файлов .с. Перед тем. как компилятор сможет собрать программу и подготовить ее к работе, ему нужно проверить действительно ли все функции реализованы, доступны ли все статические библиотеки и собрать ее в один файл. Поэтому, первым делом выполняется препроцессор, который собирает исходный файл, выполняются такие инструкции, как include для включения кода заголовочных файлов.
На следующем этапе к работе приступает компилятор, он выполняет все необходимые действия над кодом, разбирает синтаксические конструкции языка, переменные и преобразовывает все это в промежуточный код, а затем в код машинных команд, который мы можем потом посмотреть на языке ассемблера. Программа на этом этапе называется объектный модуль и она еще не готова к выполнению.
Далее к работе приступает компоновщик. Его задача связать объектный модуль со статическими библиотеками и другими объектными модулями. Для каждого исходного файла создается отдельный объектный модуль. Только теперь программа может быть запущена.
А теперь, давайте рассмотрим весь єтот процесс на практике с использованием компилятора GCC.
4. Как собрать программу
Для сборки программ в Linux используется два типа компиляторов, это Gcc и Clang. Пока что GCC более распространен, поэтому рассматривать мы будем именно его. Обычно, программа уже установлена в вашей системе, если же нет, вы можете выполнить для установки в Ubuntu:
sudo apt install gcc
Перед тем как мы перейдем к написанию и сборке программы, давайте рассмотрим синтаксис и опции компилятора:
$ gcc опции исходный_файл_1.с -o готовый_файл
С помощью опций мы говорим утилите что нужно сделать, какие библиотеки использовать, затем просто указываем исходные файлы программы. Давайте рассмотрим опции, которые будем сегодня использовать:
- -o — записать результат в файл для вывода;
- -c — создать объектный файл;
- -x — указать тип файла;
- -l — загрузить статическую библиотеку.
Собственно, это все самое основное, что нам понадобится. Теперь создадим нашу первую программу. Она будет выводить строку текста на экран и чтобы было интереснее, считать квадратный корень из числа 9. Вот исходный код:
int main() <
printf(«losst.run»);
printf(«Корень: %fn», sqrt(9));
return 0;
>
Я специально добавил функцию корня чтобы показать как работать с библиотеками. Сначала нужно собрать объектный файл. Перейдите в папку с исходниками и выполните:
gcc -c program.c -o program.o
Это этап компиляции, если в программе нет ошибок, то он пройдет успешно. Если исходных файлов несколько, то такая команда выполняется для каждого из них. Далее выполняем линковку:
gcc -lm program.o -o program
Обратите внимание на опцию -l, с помощью нее мы указываем какие библиотеки нужно подключить, например, здесь мы подключаем библиотеку математических функций, иначе компоновщик просто не найдет где есть та или иная функция. Только после этого можно запустить программу на выполнение:
Конечно, все эти действия могут быть выполнены и с помощью различных графических сред, но выполняя все вручную, вы можете лучше понять как все работает. С помощью команды ldd вы можете посмотреть какие библиотеки использует наша программа:
Это две библиотеки загрузчика, стандартная libc и libm, которую мы подключили.
5. Автоматизация сборки
Когда мы рассматриваем программирование под Linux невозможно не отметить систему автоматизации сборки программ. Дело в том, что когда исходных файлов программы много, вы не будете вручную вводить команды для их компиляции. Можно записать их один раз, а затем использовать везде. Для этого существует утилита make и файлы Makefile. Этот файл состоит из целей и имеет такой синтаксис:
цель: зависимости
команда
В качестве зависимости цели может быть файл или другая цель, основная цель — all, а команда выполняет необходимые действия по сборке. Например, для нашей программы Makefile может выглядеть вот так:
program: program.o
gcc -lm program.o -o program
program.o: program.c
gcc -c program.c -o program.o
Затем вам достаточно выполнить команду make для запуска компиляции, только не забудьте удалить предыдущие временные файлы и собранную программу:
Программа снова готова и вы можете ее запустить.
Выводы
Создание программ Linux очень интересно и увлекательно. Вы сами убедитесь в этом, когда немного освоитесь в этом деле. Сложно охватить все в такой небольшой статье, но мы рассмотрели самые основы и они должны дать вам базу. В этой статье мы рассмотрели основы программирования в linux, если у вас остались вопросы, спрашивайте в комментариях!
Курс программирования на Си под Linux:
Нет похожих записей
Оцените статью:
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.
13 комментариев
Какой бред понаписан.
Статья служит хорошим введением в программирование. Где тут бред?
если уже заинтересовать пользователя программированием. то лудше делать это более информативно. к примеру какие нибуть примеры программ, что вообще можно сделать, какие есть редакторы и можно ли использовать UI.
Пример простой программы здесь есть.
Для освоения UI — это уже следующий этап и новая статья. Туда же можно запихнуть и редакторы.
А так, по-моему, все хорошо написано.
Хороший старт для тех кто пишет под windows на C# и хочет «больше экстрима в повседневной жизни». Тут вам не кнопочки мышкой кликать.
Спасибо за понятное введение в тему.
Я только не понял где используется опция «l» компилятора?
Очень хорошая статья! Простым и доступным языком описаны самые основные для каждого новичка вещи. После этой статьи можно пускаться в дебри программирования на Си.
Си это основной язык программирования, ведь все современные языки написаны на нём. Переменная в python это всего лишь структура на си. Если знаешь си, освоить любой другой не составит проблем.
Си даёт полную свободу программисту соблюдай основные правила и делай что хочешь. А если использовать указатели , typedef и директивы препроцессора, то можешь пользоваться любым синтаксисом какой тебе в голову придёт. Единственный недостаток gui только GTK.