stringtranslate.com

GNU Автоинструменты

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

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

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

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

Компоненты

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

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

GNU Автоконф.

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

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

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

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

GNU Автомейкер

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

GNU Библиотека

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 и другие инструменты, предназначенные для работы с версией GCC MinGW .

Хотя ожидается, что разработчик предоставит конечному пользователю сценарий настройки , иногда пользователь может захотеть заново создать сценарий настройки. Такая работа может потребоваться, если пользователь желает изменить сам исходный код. Таким пользователям потребуется установить 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, 2nd Edition: A Practitioner’s Guide to GNU Autoconf, Automake и Libtool , высказал мнение: [10]

Autotools на самом деле более прозрачен, чем любые другие инструменты сборки. Все эти другие инструменты (cmake, maven и т. д.), которые претендуют на то, чтобы быть намного проще, поскольку изолируют пользователя от основных деталей процесса сборки, основной недостаток этих инструментов заключается в том, что сама эта изоляция не позволяет пользователям создавать изменения, необходимые им для достижения уникальных целей сборки, специфичных для конкретного проекта.

Любой, кто может сказать только хорошее об этом аспекте cmake, maven, gradle или чего-то еще, просто не работал над проектом, который требует от него отойти достаточно далеко от настроек по умолчанию. Я использовал их все и провел часы в отчаянии, пытаясь определить, как обойти недостатки некоторых универсальных (кроме того, что мне нужно) функций инструмента. Это просто не проблема Autotools. Как кто-то упоминал ранее в этой теме, вы можете поместить сценарий оболочки в файл configure.ac и создать сценарий в файл Makefile.am. Это само определение прозрачности. Ни один другой существующий инструмент не обеспечивает такого уровня гибкости.

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

Рекомендации

  1. ^ «Хостинг Savannah Git — autoconf.git/blob — КОПИРОВАНИЕ.ИСКЛЮЧЕНИЕ» . Git.savannah.gnu.org . Архивировано из оригинала 21 июля 2011 г. Проверено 1 апреля 2016 г.
  2. ^ «libtool.git — GNU Libtool». Git.savannah.gnu.org . 8 января 2005 г. Проверено 1 апреля 2016 г.
  3. ^ «Система настройки и сборки GNU — Введение» . Airs.com . 1 июля 1998 г. Проверено 1 апреля 2016 г.
  4. ^ «Изучение инструментов разработки GNU». Autotoolset.sourceforge.net . Проверено 1 апреля 2016 г.
  5. ^ «automake: Система сборки GNU» . Gnu.org . 31 декабря 2014 г. Проверено 1 апреля 2016 г.
  6. ^ «Кросс-компиляция с помощью GNU Autotools». Архивировано из оригинала 13 октября 2008 года . Проверено 24 сентября 2008 г.
  7. ^ «Роберт Огрен - Медленное выполнение сценария оболочки на Cygwin» . Cygwin.com . Проверено 1 апреля 2016 г.
  8. ^ Камп, Пол-Хеннинг (2012). «Поколение, потерянное на базаре». Очередь АКМ . 10 (8): 20–23. дои : 10.1145/2346916.2349257 . S2CID  11656592.
  9. ^ «Autotools, 2-е издание Джона Калькота | Penguin Random House Canada» . Проверено 22 января 2021 г.
  10. ^ «Re: Планы на будущее для Autotools» . Проверено 22 января 2021 г.

Внешние ссылки