GNU Autotools - GNU Autotools

Логотип GNU

В GNU Autotools, также известный как Система сборки GNU, представляет собой набор инструменты программирования разработан, чтобы помочь в создании исходный код пакеты портативный слишком много Unix-подобный системы.

Сделать программное обеспечение переносимым может быть сложно: Компилятор C отличается от системы к системе; некоторые библиотечные функции отсутствуют в некоторых системах; заголовочные файлы могут иметь разные имена. Один из способов справиться с этим - написать условный код с блоками кода, выбранными с помощью директив препроцессора (#ifdef); но из-за большого разнообразия сред сборки этот подход быстро становится неуправляемым. Autotools разработан для более управляемого решения этой проблемы.

Autotools является частью Набор инструментов GNU и широко используется во многих свободное программное обеспечение и Открытый исходный код пакеты. Его составляющие инструменты: свободное программное обеспечение, под лицензией Стандартная общественная лицензия GNU со специальными исключениями из лицензии[1][2] разрешая его использование с проприетарное программное обеспечение.

Система сборки GNU позволяет создавать множество программ, используя двухэтапный процесс: настроить с последующим делать.[3]

Компоненты

Блок-схема autoconf и automake

Autotools состоит из GNU служебные программы Autoconf, Automake, и Libtool.[4] Другие связанные инструменты, часто используемые вместе с ним, включают GNU делать программа, GNU gettext, pkg-config, а Коллекция компиляторов GNU, также называемый GCC.

GNU Autoconf

Autoconf генерирует настроить скрипт на основе содержимого configure.ac файл, который характеризует конкретную часть исходного кода. В настроить скрипт при запуске сканирует среду сборки и генерирует подчиненный config.status скрипт, который, в свою очередь, преобразует другие входные файлы и чаще всего Makefile.in в выходные файлы (Makefile), которые подходят для этой среды сборки. Наконец делать программа использует Makefile для создания исполняемых программ из исходного кода.

Сложность Autotools отражает разнообразие обстоятельств, при которых может быть собран основной код исходного кода.

  • Если файл исходного кода был изменен, достаточно перезапустить делать который повторно компилирует только ту часть исходного кода, на которую повлияло изменение.
  • Если файл был изменен, достаточно перезапустить config.status и делать.
  • Если тело исходного кода скопировано на другой компьютер, достаточно перезапустить настроить (который работает config.status) и делать. (По этой причине исходный код с использованием Autotools обычно распространяется без файлов, настроить генерирует.)
  • Если основная часть исходного кода изменена более фундаментально, то configure.ac и файлы необходимо изменить, а также выполнить все последующие шаги.

Для обработки файлов autoconf использует реализацию GNU м4 макросистема.

Autoconf поставляется с несколькими вспомогательными программами, такими как Autoheader, который используется для управления C файлы заголовков; Autoscan, который может создать начальный входной файл для Autoconf; и ifnames, который может перечислить идентификаторы препроцессора C, используемые в программе.

GNU Automake

Automake помогает создавать портативные Makefiles, которые, в свою очередь, обрабатываются делать полезность. Он принимает свой ввод как Makefile.am, и превращает его в Makefile.in, который используется скриптом настройки для создания файла Makefile вывод. Он также выполняет автоматическое отслеживание зависимостей; каждый раз при компиляции исходного файла записывается список зависимостей (например, файлы заголовков C). Позже, каждый раз, когда запускается make и кажется, что зависимость изменилась, зависимые файлы будут перестроены.

GNU Libtool

Libtool помогает управлять созданием статический и динамичный библиотеки на различных Unix-подобный операционные системы. Libtool выполняет это, абстрагируя процесс создания библиотеки, скрывая различия между различными системами (например, GNU /Linux системы vs. Солярис ).

Гнулиб

Гнулиб упрощает процесс создания программного обеспечения, использующего Autoconf и Automake, переносимого в широкий спектр систем.

Применение

Autotools помогает разработчики программного обеспечения написать кросс-платформенный программного обеспечения и сделать его доступным для гораздо более широкого сообщества пользователей, в том числе в форме исходного кода для тех пользователей, которые хотят создать программное обеспечение самостоятельно. В большинстве случаев пользователи просто запускают прилагаемый настроить скрипт (у которого нет никаких зависимостей, кроме наличия Борн-совместимый оболочка ), а затем делать программа.[5] Им не нужно устанавливать на компьютер сами Autotools.

Его можно использовать как для сборки собственных программ на машине сборки, так и для кросс-компиляция к другим архитектурам.[6]

Кросс-компиляция программного обеспечения для запуска на хосте Windows из GNU / Linux или другой Unix-подобной системы сборки также возможна с использованием MinGW, однако нативная компиляция часто желательна в операционных системах (таких как Майкрософт Виндоус семейство систем), которые не могут запускать сценарии оболочки Борна самостоятельно. Это делает создание такого программного обеспечения в операционной системе Windows немного сложнее, чем в Unix-подобный система, которая предоставляет оболочку Bourne как стандартный компонент. Можно установить Cygwin или MSYS систему поверх Windows, чтобы обеспечить Unix-подобный уровень совместимости хотя, позволяя настроить скрипты для запуска. Cygwin также предоставляет Коллекция компиляторов GNU, GNU make, и другое программное обеспечение, которое обеспечивает почти полную Unix-подобную систему в Windows; MSYS также предоставляет GNU make и другие инструменты, предназначенные для работы с MinGW версия GCC.

Хотя ожидается, что разработчик предоставит настроить сценарий для конечного пользователя, иногда пользователь может захотеть заново сгенерировать сам сценарий конфигурации. Такая работа может потребоваться, если пользователь желает внести поправки в сам исходный код. Таким пользователям потребуется установить Autotools и использовать такие компоненты, как его autoreconf.

Сгенерированный autoconf настроить может быть медленным, поскольку он выполняет такие программы, как компилятор C, много раз, чтобы проверить наличие различных библиотек, файлов заголовков и языковых функций. Это особенно влияет на Cygwin, который из-за отсутствия родного системный вызов fork, может выполнять скрипты настройки значительно медленнее, чем Linux.[7]

Критика

В своей колонке для Очередь ACM, FreeBSD разработчик Поул-Хеннинг Камп раскритиковал систему сборки GNU:[8]

Идея состоит в том, что сценарий configure выполняет примерно 200 автоматических тестов, чтобы пользователю не приходилось настраивать libtool вручную. Это ужасно плохая идея, которую уже много критиковали еще в 1980-х, когда она появилась, поскольку она позволяет исходному коду притворяться переносимым за оболочкой скрипта configure, вместо того, чтобы фактически иметь качество переносимости с самого начала. Это пародия, что идея configure выжила.

Камп обрисовывает историю системы сборки в проблемах переносимости, присущих множество вариантов Unix 1980-х, и оплакивает необходимость существования таких систем сборки:

31 085 строк конфигурации для libtool все еще проверяют, <sys/stat.h> и <stdlib.h> существуют, несмотря на то, что Unixen, в котором они отсутствовали, не имел ни достаточной памяти для выполнения libtool, ни дисков, достаточно больших для его исходного кода размером 16 Мбайт.

Смотрите также

использованная литература

  1. ^ «Хостинг Savannah Git - autoconf.git / blob - COPYING.EXCEPTION». Git.savannah.gnu.org. Архивировано из оригинал на 2011-07-21. Получено 2016-04-01.
  2. ^ "libtool.git - GNU Libtool". Git.savannah.gnu.org. 2005-01-08. Получено 2016-04-01.
  3. ^ «Система настройки и сборки GNU - Введение». Airs.com. 1998-07-01. Получено 2016-04-01.
  4. ^ «Изучение инструментов разработки GNU». Autotoolset.sourceforge.net. Получено 2016-04-01.
  5. ^ "automake: система сборки GNU". Gnu.org. 2014-12-31. Получено 2016-04-01.
  6. ^ «Кросс-компиляция с помощью GNU Autotools». Архивировано из оригинал 13 октября 2008 г.. Получено 24 сентября, 2008.
  7. ^ «Роберт Огрен - Медленное выполнение сценария оболочки на Cygwin». Cygwin.com. Получено 2016-04-01.
  8. ^ Камп, Поул-Хеннинг (2012). «Поколение, потерянное на базаре». Очередь ACM. 10 (8).

внешняя ссылка