Как создать пакет программ в Unix / Linux

Как мы можем создать программный пакет. Так чтобы после извлечения нашего программного обеспечения tar ball пользователь может сделать типичные шаги:

$ gunzip < mycode.tar.gz | tar xvf -
$ ./configure
$ make
$ make install

6 ответов


альтернативой трудно понять GNU / Autools является CMake.

http://www.cmake.org/cmake/help/examples.html

например, KDE использует его.


посмотрите в цепочку инструментов GNU autoconf/automake. вот бесплатный учебник/книгу.


в старые времена этот процесс выполнялся вручную. Каждый Makefile было написано от руки (файл make использует как своего рода сценарий). Это стало проблематичным, когда дело дошло до переносимости, и поэтому configure скрипт был сделан. The ./configure скрипт был написан вручную для каждого проекта. В конце концов это было автоматизировано GNU с их autotools пакета. Это состоит из autoconf, automake, и некоторые другие. Хотя альтернативы существуют, особенно для make, autotools наиболее широко используется. ..- ... По крайней мере, в системах GNU/Linux. Альтернативы включают уже упомянутые CMake, импульс.Build, импульс.Джем!--11-->, проектов SCons и многое другое.


используйте autotools для создания сценария configure (который будет генерировать Makefile, необходимый для последних двух шагов), а затем сделайте tarball со всем вашим кодом и прочее в нем.


rpmbuild-это команда для сборки rpm-пакетов

man page

учебник


от Autotools.

вам нужно будет написать configure.ac и Makefile.am скрипты.

Настройка.ac довольно прост и может быть в основном автогенерирован от запуска "autoscan" на вашем исходном коде. Это создаст ' configure.сканируйте ' файл, который вам нужно будет настроить для создания окончательной настройки.файл переменного тока.

Автомат.файл am основан на соглашениях. Вам, вероятно, понадобится что-то вроде:

AUTOMAKE_OPTIONS = foreign subdir-objects
AM_CXXFLAGS = -std=c++11 -static-libstdc++ -Wall -Werror \
    -Wfatal-errors -I blah
AM_LDFLAGS = blah

bin_PROGRAMS = mybinary
mybinary_SOURCES = \
    blah.h blah.cc

все основано на схема:

  • dist vs nodist = должен ли он быть построен
  • inst vs noinst = должен ли он быть установлен
  • DATA = файлы данных
  • MANS = man pages
  • SOURCES = исходный код

таким образом, dist_noinst_DATA предназначен для файлов данных, необходимых для создания, но не установлены.

Как только у вас есть оба этих файла, вам обычно нужно запустить что-то вроде:

aclocal & & autoheader && automake --add-отсутствует & & autoconf

для настройки файлов autotools, необходимых для построения. Это можно поместить в сценарий оболочки и запустить до запуска ./формировать.