GNU Автоинструменты
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2009 г. ) |
Оригинальный автор(ы) | Сообщество |
---|---|
Разработчик(и) | Фонд свободного программного обеспечения |
Стабильная версия | Несколько |
Написано в | M4 (компьютерный язык) , C |
Операционная система | Кросс-платформенный |
Платформа | ГНУ и другие |
Входит в комплект | Операционная система GNU |
Доступно в | Английский |
Лицензия | Стандартная общественная лицензия GNU версии 2. |
Веб-сайт | www |
GNU Autotools , также известный как GNU Build System , представляет собой набор инструментов программирования , предназначенных для помощи в создании исходного кода пакетов , переносимых на многие Unix-подобные системы.
Сделать программу переносимой может быть сложно: компилятор C отличается от системы к системе; в некоторых системах отсутствуют определенные библиотечные функции; файлы заголовков могут иметь разные имена; общие библиотеки могут быть скомпилированы и установлены разными способами. Одним из способов справиться с различиями платформ является написание условного кода с блоками кода, выбранными с помощью директив препроцессора ( #ifdef
); но из-за большого разнообразия сред сборки этот подход быстро становится неуправляемым. Autotools предназначен для более удобного решения этой проблемы.
Autotools является частью набора инструментов GNU и широко используется во многих бесплатных программах и пакетах с открытым исходным кодом . Входящие в его состав инструменты представляют собой бесплатное программное обеспечение , лицензированное по лицензии GNU General Public License со специальными исключениями из лицензии. [1] [2] разрешая его использование с проприетарным программным обеспечением .
Система сборки GNU позволяет создавать множество программ, используя двухэтапный процесс: configure, а затем make . [3]
Компоненты
[ редактировать ]Autotools состоит из GNU утилит Autoconf , Automake и Libtool . [4] Другие связанные инструменты, часто используемые вместе с ним, включают GNU make , GNU gettext , pkg-config и коллекцию компиляторов GNU (GCC).
Автоконф.
[ редактировать ]Autoconf генерирует configure
сценарий, основанный на содержимом configure.ac
файл, который характеризует конкретный фрагмент исходного кода. configure
скрипт при запуске сканирует среду сборки и генерирует подчиненный config.status
скрипт, который, в свою очередь, преобразует другие входные файлы и чаще всего Makefile.in
в выходные файлы ( Makefile
), которые подходят для этой среды сборки. Наконец, make
программа использует Makefile
генерировать исполняемые программы из исходного кода.
Сложность Autotools отражает разнообразие обстоятельств, при которых может быть создан корпус исходного кода.
- Если файл исходного кода изменен, то достаточно перезапустить
make
, который перекомпилирует только ту часть тела исходного кода, на которую повлияло изменение. - Если
.in
файл изменился, то достаточно перезапуститьconfig.status
иmake
. - Если тело исходного кода скопировано на другой компьютер, то достаточно перезапустить
configure
(который работаетconfig.status
) иmake
. (По этой причине исходный код с использованием Autotools обычно распространяется без файлов,configure
генерирует.) - Если тело исходного кода изменится более фундаментально, то
configure.ac
и.in
файлы необходимо изменить и все последующие действия также выполнить.
Для обработки файлов autoconf использует реализацию GNU макросистемы m4 .
Autoconf поставляется с несколькими вспомогательными программами, такими как autoheader
, который используется для управления C файлами заголовков ; autoscan
, который может создать исходный входной файл для Autoconf; и ifnames
, который может перечислять идентификаторы препроцессора C, используемые в программе.
Автопроизводитель
[ редактировать ]Automake помогает создавать портативные Makefile
s, которые, в свою очередь, обрабатываются утилитой make . Он принимает свои входные данные как Makefile.am
и превращает его в Makefile.in
, который используется сценарием настройки для создания файла Makefile
выход. Он также выполняет автоматическое отслеживание зависимостей; каждый раз, когда компилируется исходный файл, записывается список зависимостей (например, заголовочные файлы C). В дальнейшем, при каждом запуске make и изменении зависимости зависимые файлы будут пересозданы.
Libtool
[ редактировать ]Libtool помогает управлять созданием статических и динамических библиотек в различных Unix-подобных операционных системах. Libtool достигает этого, абстрагируя процесс создания библиотеки, скрывая различия между различными системами (например, системами Linux и Solaris ).
Использование
[ редактировать ]Autotools помогает разработчикам программного обеспечения писать кроссплатформенное программное обеспечение и делать его доступным для гораздо более широкого сообщества пользователей, в том числе в виде исходного кода для тех пользователей, которые хотят создать программное обеспечение самостоятельно. В большинстве случаев пользователи просто запускают прилагаемый configure
скрипт (который не имеет никаких зависимостей, кроме наличия Bourne-совместимой оболочки ), а затем make
программа. [5] Им не обязательно устанавливать на компьютер сами Autotools.
Его можно использовать как для сборки собственных программ на машине сборки, так и для кросс-компиляции в другие архитектуры. [6]
Кросс-компиляция программного обеспечения для запуска на хосте Windows из Linux или другой Unix-подобной системы сборки также возможна с использованием MinGW, однако собственная компиляция часто желательна в операционных системах (таких как системы семейства Microsoft Windows ), которые не могут запускать Bourne. сценарии оболочки самостоятельно. Это делает создание такого программного обеспечения в операционной системе Windows немного сложнее, чем в Unix-подобной системе, которая предоставляет оболочку Bourne в качестве стандартного компонента. Однако можно установить систему Cygwin или MSYS поверх Windows, чтобы обеспечить с Unix уровень совместимости , позволяя настройки запускать сценарии . Cygwin также предоставляет GNU Compiler Collection , GNU make и другое программное обеспечение, которое обеспечивает почти полную Unix-подобную систему в Windows; MSYS также предоставляет GNU make и другие инструменты, предназначенные для работы с MinGW версией GCC .
Хотя ожидается, что разработчик предоставит настройки конечному пользователю сценарий , иногда пользователь может захотеть заново создать сценарий настройки. Такая работа может потребоваться, если пользователь желает изменить сам исходный код. Таким пользователям необходимо будет установить Autotools и использовать такие компоненты, как autoreconf .
Созданный autoconf configure
может быть медленным, поскольку он много раз выполняет такие программы, как компилятор C, чтобы проверить наличие различных библиотек, файлов заголовков и языковых функций. Это особенно касается Cygwin , который из-за отсутствия собственного системного вызова fork может выполнять сценарии настройки значительно медленнее, чем Linux . [7]
Критика
[ редактировать ]В своей колонке для ACM Queue FreeBSD Пол - разработчик Хеннинг Камп раскритиковал систему сборки GNU: [8]
Идея состоит в том, что скрипт configure выполняет примерно 200 автоматических тестов, чтобы пользователь не был обременен настройкой libtool вручную. Это ужасно плохая идея, которую уже много критиковали еще в 1980-х годах, когда она появилась, поскольку она позволяет исходному коду притворяться переносимым за видимостью сценария настройки, вместо того, чтобы на самом деле иметь качество переносимости с самого начала. Это пародия на то, что идея конфигурирования сохранилась.
Камп обрисовывает историю системы сборки в проблемах переносимости, присущих множеству вариантов Unix 1980-х годов , и сетует на необходимость существования таких систем сборки:
31 085 строк конфигурации для libtool все еще проверяют, <sys/stat.h> и <stdlib.h> существуют, хотя Unixen, в котором они отсутствовали, не имела ни достаточного количества памяти для выполнения libtool, ни дисков, достаточно больших для его 16-мегабайтного исходного кода.
Хотя критики Autotools часто выступают за альтернативы, которые обеспечивают большую простоту для пользователей, некоторые утверждают, что это не обязательно хорошо. Джон Калькот, автор [9] из Autotools, 2-е издание: «Руководство для практикующих специалистов по GNU Autoconf, Automake и Libtool» , высказал мнение: [10]
Autotools на самом деле более прозрачен, чем любые другие инструменты сборки. Все эти другие инструменты (cmake, maven и т. д.), которые претендуют на то, чтобы быть намного проще, поскольку изолируют пользователя от основных деталей процесса сборки, основной недостаток этих инструментов заключается в том, что сама эта изоляция не позволяет пользователям создавать изменения, необходимые им для достижения уникальных целей сборки, специфичных для конкретного проекта.
Любой, кто может сказать только хорошее об этом аспекте cmake, maven, gradle или чего-то еще, просто не работал над проектом, который требует от него отойти достаточно далеко от настроек по умолчанию. Я использовал их все и провел часы в отчаянии, пытаясь определить, как обойти недостатки некоторых универсальных (кроме того, что мне нужно) функций инструмента. Это просто не проблема Autotools. Как кто-то упоминал ранее в этой теме, вы можете поместить сценарий оболочки в файл configure.ac и создать сценарий в файл Makefile.am. Это само определение прозрачности. Ни один другой существующий инструмент не обеспечивает такого уровня гибкости.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Хостинг Savannah Git — autoconf.git/blob — КОПИРОВАНИЕ.ИСКЛЮЧЕНИЕ» . Git.savannah.gnu.org . Архивировано из оригинала 21 июля 2011 г. Проверено 1 апреля 2016 г.
- ^ «libtool.git — GNU Libtool» . Git.savannah.gnu.org . 8 января 2005 г. Проверено 1 апреля 2016 г.
- ^ «Система настройки и сборки GNU — Введение» . Airs.com . 1 июля 1998 г. Проверено 1 апреля 2016 г.
- ^ «Изучение инструментов разработки GNU» . Autotoolset.sourceforge.net . Проверено 1 апреля 2016 г.
- ^ «automake: Система сборки GNU» . Gnu.org . 31 декабря 2014 г. Проверено 1 апреля 2016 г.
- ^ «Кросс-компиляция с помощью GNU Autotools» . Архивировано из оригинала 13 октября 2008 года . Проверено 24 сентября 2008 г.
- ^ «Роберт Огрен — Медленное выполнение сценария оболочки на Cygwin» . Cygwin.com . Проверено 1 апреля 2016 г.
- ^ Камп, Пол-Хеннинг (2012). «Поколение, потерянное на базаре» . Очередь АКМ . 10 (8): 20–23. дои : 10.1145/2346916.2349257 . S2CID 11656592 .
- ^ «Autotools, 2-е издание Джона Калькота | Penguin Random House Canada» . Проверено 22 января 2021 г.
- ^ «Re: Планы на будущее для Autotools» . Проверено 22 января 2021 г.