Итак, сборка программы в 90% случаях состоит из трёх этапов: 1)конфигурирование; 2)компиляция; 3)установка.
Сначала необходимо поместить исходники собираемого пакета в каталог /opt/src (либо /usr/src для сборки ядра, либо /home/имяпользователя/src для сборки не суперпользователем). Это можно сделать, распаковав архив с исходниками при помощи tar или другого архиватора, либо получить при помощи системы управления версиями cvs, svn или git. Затем нужно войти в этот каталог и просмотреть его содержимое.
Если видим файл с именем Makefile (сценарий для компилятора make) значит конфигурирование не требуется (хотя есть исключение, ядро например конфигурируется командой make config и прочими).
Целью конфигурирования является появление файла Makefile. Обычно конфигурирование осуществляется посредством скрипта configure. Скрипт можно запустить с параметрами, самым интересным из которых является --prefix=<каталог> (определение каталога в который буден установлен пакет), полный список параметров можно узнать, введя "./configure --help"/пакетов
После конфигурирования можно компилировать пакет. Команда make.
После того как пакет скомпилирован его можно установить в систему. Вводится команда "make install". При необходимости удалить установленный пакет, необходимо снова войти в каталог с откомпилированными исходниками и выполнить "make uninstall"
Существуют пакеты в которых этап конфигурирования выполняется с помощью средства cmake. Если в каталоге с исходниками отсутствует скрипт configure, а присутствует файл CMakeLists.txt - то это как раз тот случай. Выполняется конфигурирование из отдельного каталога:
Код: Выделить всё
mkdir build && cd build && cmake ..После этого в каталоге build появятся сконфигурированные исходники с файлом Makefile.
Вообще в каталоге с исходниками должны присутствовать файлы README или INSTALL. В них должны быть инструкции как правильно собирать пакет. И самое главное в них должно быть указано от каких пакетов собираемый пакет зависит.
Мне однажды попался пакет, для компиляции которого вместо make используется новое средство scons. То есть вместо:
Код: Выделить всё
./configure
make
make installнужно вводить
Код: Выделить всё
scons
scons installЯ бы отметил, что в этом случае сообщения выводимые в процессе сборки более информативные и по ним легко можно определить причину ошибки если она возникает.
А теперь будут вопросы.
Первое: ошибки (Error) и предупреждения (Warning). Данные сообщения могут появляться как в процессе конфигурирования, так и компеляции. Я заметил такую законемерность - если пает не зафэйлился в процессе конфигурирования - то он на 90% не зафейлится в процессе компиляции. Причиной ошибок как я понимаю является то, что в системе чего-то не хватает. Для меня самое сложное определить чего именно не хватает.
Вот сейчас пытаюсь собрать libtorrent, скрипт configure выдаёт:
Код: Выделить всё
sunny-desktop:/opt/src/libtorrent# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
./configure: line 2483: syntax error near unexpected token `1.9.6'
./configure: line 2483: `AM_PATH_CPPUNIT(1.9.6)'И как понять чего в системе не хватает? Пакеты указанные в README: libsigc++-2.0, libsigc++-2.0-dev и g++ вроде установлены. На строке 2483 скрипта configure только:
Код: Выделить всё
AM_PATH_CPPUNIT(1.9.6)И такие заминки случаются с каждым четвёртым пакетом.
Второе. Если в каталоге исходников нет скрипта configure, а есть autoconf.sh, в результате работы которого формируется configure, то какие общие правила сборки таких пакетов? Зачем нужна такая многоступенчатая комбинация?
И третье. Если пакет был скомпилирован правильно, то где должны находиться все собранные файлы? И где должен находиться файллист на основе которого команда "make install" производит установку пакета? И наконец, что делает команда "checkinstall make install" которую рекомендуется использовать вместо "make install"?