MyTetra Share
Делитесь знаниями!
Типовая сборка программ под Linux. Что делать, если нет файла configure, какие системы сборки бывают
Время создания: 10.01.2020 16:11
Текстовые метки: linux, сборка, компиляция, установка, программа, система, конфигурирование, configure, autotools, make, install, makefile, autogen, bootstrap, cmake, qmake
Раздел: Компьютер - Linux - Инсталляция программ
Запись: xintrea/mytetra_syncro/master/base/1578661862sk81scefcd/text.html на raw.github.com

В ОС Linux авторы программ традиционно наплевательски относятся к пользователям. Зачастую файлы README и INSTALL содержат недостоверную информацию о том, как собирать загадочные проекты этих сумрачных гениев. Поэтому, опытный Linux-пользователь должен уметь "на глаз" определять, какая система сборки используется в том или ином программном пакете. Определяется это, обычно, по составу файлов, которые находятся в корне проекта.


Для сборки программ в GNU/Linux используется (в основном) программа make, которая запускает инструкции из файла Makefile. Но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, пришлось бы для каждого дистрибутива отдельно прописывать пути, где какие лежат библиотеки и куда лезть за заголовочными файлами. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать Makefile. Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают Makefile. Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов… Хорошая новость в том, что на этом они остановились.

Для сборки нам нужны компиляторы: они прописаны в зависимостях пакета build-essential, так что достаточно установить его со всеми зависимостями. Ещё нужны autoconf, automake и cmake, все это рано или поздно пригодится.


Automake + Autoconf

Итак, чтобы собрать что-то из исходников, нужно сначала собрать конфигуратор configure. Если файл с таким именем уже есть в исходниках, то можно сразу запускать его. Но бывает так, что этого файла нет. Тогда, если это проект на c/c++, а не какой-нибудь Ruby или Go, то правила сборки конфигуратора configure могут быть описаны в файле configure.in. Если такого файла нет, то скорее всего используется какая-либо другая система сборки, например cmake.

Итак, для сборки конфигуратора configure, в случае если файл configure.in существует, необходимо выполнить команду:


./bootstrap


или


./autogen.sh


Если таких скриптов в архиве не оказалось, то можно выполнить последовательно следующие команды:


aclocal

autoheader

automake --gnu --add-missing --copy --foreign

autoconf -f -Wall


Все эти команды используют файл configure.in. После выполнения этих команд создастся файл configure. После этого необходимо запустить конфигуратор для проверки наличия всех зависимостей, а также установки дополнительных опций сборки (если возможно) и просмотра результата установки (опционально - может не быть):


./configure


Внимание!

Иногда разработчики поставляют исходники, в которых одновременно присутствуют и файл autogen.sh и файл configure. Чаще всего это означает, что разработчики забыли исключить файл configure из комплекта поставки. По-хорошему, они должны были поставить только autogen.sh, чтобы он сгенерировал configure с учетом системы пользователя. Поэтому не стоит торопиться и сразу запускать configure. Возможно, стоит переименовать этот файл, запустить autogen.sh, и запустить новый configure. Если он не стработает, попробовать запустить старый.

Попадаются и такие проекты, в которых переход на autogen.sh либо заброшен, либо находится в начальной стадии. И центральным, генерирующим Makefile скриптом, является configure. Конечно, разработчики нигде об этом писать не будут, исходя из принципа что кому нужно - тот сам разберется. В этом случае нет смысла запускать autogen.sh, нужно расчитывать именно на configure.

Как было сказано выше, сборка программ под Linux - это особая магия, иногда требующая умения читать мысли незнакомых людей.


Конфигуратор configure построит Makefile основываясь на полученных знаниях и файле makefile.am. Можно передать конфигуратору опции, предусмотренные в исходниках программы, которые позволяют включать/отключать те или иные возможности программы, обычно узнать о них можно командой


./configure --help


Также есть набор стандартных опций, вроде


--prefix=


которая указывает, какой каталог использовать для установки. Для Ubuntu обычно


--prefix=/usr


или


--prefix=/usr/local


Пути указываются без слеша в конце!


Cmake

Если в проекте имеется файл CMakeLists.txt, то скорее всего, проект надо собирать через утилиту cmake.

Традиционно, сборка проекта с cmake, если не оговорено отдельно, производится следующим образом:


  1. Создать в каталоге корня проекта подкаталог build. Корень проекта определяется, обычно, по тому, что в нем лежит файл CMakeLists.txt.
  2. Перейти в подкаталог build
  3. Выполнить команду:

cmake ..


Для команды cmake может потребоваться указать еще какие-то дополнительные опции, типа:


cmake .. -DCMAKE_INSTALL_PREFIX=/usr


В любом случае, после этой команды, в катлоге build должны появиться разные файлы, и среди них обязательно должен быть Makefile.


Qmake

Если проект написан на Qt, то он, скорее всего, собирается через qmake (верно для Qt 3, 4, 5). Признаком того, что проект написан на Qt, является наличие файла с расширением *.pro, - это и есть файл Qt пректа. Утилита qmake делает на основе *.pro-файла файл Makefile.

Команда сборки, обычно, следующая. В каталоге, где лежит *.pro-файл необходимо выполнить:


qmake .


Да, надо обратить внимание, что команда с точкой. Точка означает текущий каталог. После работы данной команды, должен появиться файл Makefile. Следует учесть, что для успешной сборки qt-проекта, в системе должен быть установлен и фреймверк Qt соответствующей версии, и dev-пакеты к нему.


Make

make - это утилита, ради которой все вышеперечисленное и затевалось. Make занимается, непосредственно, сборкой проекта. Для работы make необходимо наличие Makefile (мейкфайла), который создавался на предыдущих шагах. Запуск процесса сборки производится командой:


make


Для сборки достаточно привелегий обычного пользователя. Окончанием сборки можно считать момент, когда команда в консоли закончит свое выполнение и не будет слова error. Теперь всё скомпилировано и готово для установки.

Сама установка происходит под пользователем root с помощью команды:


make install


Либо, если необходимо установить программу через пакетный менеджер, создается пакет через программу checkinstall с соответсвующими для текущего дистрибутива опциями.


Так же в этом разделе:
 
MyTetra Share v.0.60
Яндекс индекс цитирования