WikiDer > GNU Autotools
эта статья нужны дополнительные цитаты для проверка. (Сентябрь 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
В GNU Autotools, также известный как Система сборки GNU, представляет собой набор инструменты программирования разработан, чтобы помочь в создании исходный код пакеты портативный слишком много Unix-подобный системы.
Сделать программное обеспечение переносимым может быть сложно: Компилятор C отличается от системы к системе; некоторые библиотечные функции отсутствуют в некоторых системах; заголовочные файлы могут иметь разные имена. Один из способов справиться с этим - написать условный код с блоками кода, выбранными с помощью директив препроцессора (#ifdef
); но из-за большого разнообразия сред сборки этот подход быстро становится неуправляемым. Autotools разработан для более управляемого решения этой проблемы.
Autotools является частью Набор инструментов GNU и широко используется во многих свободное программное обеспечение и Открытый исходный код пакеты. Его составляющие инструменты: свободное программное обеспечение, под лицензией Стандартная общественная лицензия GNU со специальными исключениями из лицензии[1][2] разрешая его использование с проприетарное программное обеспечение.
Система сборки GNU позволяет создавать множество программ, используя двухэтапный процесс: настроить с последующим делать.[3]
Компоненты
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 помогает создавать портативные Makefile
s, которые, в свою очередь, обрабатываются делать полезность. Он принимает свой ввод как 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 Мбайт.
Смотрите также
- Список программного обеспечения для автоматизации сборки § Инструменты для создания сценариев сборки
- Автоматизация сборки
- CMake
- Стандарты Gnits
- Стандарты кодирования GNU
- Waf
- SCons
- Система построения мезонов
- Qmake
использованная литература
- ^ «Хостинг Savannah Git - autoconf.git / blob - COPYING.EXCEPTION». Git.savannah.gnu.org. Архивировано из оригинал на 2011-07-21. Получено 2016-04-01.
- ^ "libtool.git - GNU Libtool". Git.savannah.gnu.org. 2005-01-08. Получено 2016-04-01.
- ^ «Система настройки и сборки GNU - Введение». Airs.com. 1998-07-01. Получено 2016-04-01.
- ^ «Изучение инструментов разработки GNU». Autotoolset.sourceforge.net. Получено 2016-04-01.
- ^ "automake: система сборки GNU". Gnu.org. 2014-12-31. Получено 2016-04-01.
- ^ «Кросс-компиляция с помощью GNU Autotools». Архивировано из оригинал 13 октября 2008 г.. Получено 24 сентября, 2008.
- ^ «Роберт Огрен - Медленное выполнение сценария оболочки на Cygwin». Cygwin.com. Получено 2016-04-01.
- ^ Камп, Поул-Хеннинг (2012). «Поколение, потерянное на базаре». Очередь ACM. 10 (8).
внешняя ссылка
- Система настройки и сборки GNU
- В pkg-config пакет
- Документация GNU automake
- Документация GNU autoconf
- Комбинированное руководство для Automake и Autoconf
- Учебник по Autotools
- GNU Autoconf, Automake и Libtool
- Autotools: руководство по Autoconf, Automake и Libtool для практиков
- Руководство по интеграции CUDA с Autotools
- Автоинструменты Mythbuster
- Введение в Autotools