Jump to content

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

(Перенаправлено из системы сборки GNU )
GNU Автоинструменты
Оригинальный автор(ы) Сообщество
Разработчик(и) Фонд свободного программного обеспечения
Стабильная версия
Несколько
Написано в M4 (компьютерный язык) , C
Операционная система Кросс-платформенный
Платформа ГНУ и другие
Входит в комплект Операционная система GNU
Доступно в Английский
Лицензия Стандартная общественная лицензия GNU версии 2.
Веб-сайт www .gnu .org /программное обеспечение /программное обеспечение .html

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).

Автоконф.

[ редактировать ]

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 помогает создавать портативные Makefiles, которые, в свою очередь, обрабатываются утилитой make . Он принимает свои входные данные как Makefile.amи превращает его в Makefile.in, который используется сценарием настройки для создания файла Makefile выход. Он также выполняет автоматическое отслеживание зависимостей; каждый раз, когда компилируется исходный файл, записывается список зависимостей (например, заголовочные файлы C). В дальнейшем, при каждом запуске make и изменении зависимости зависимые файлы будут пересозданы.

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. Это само определение прозрачности. Ни один другой существующий инструмент не обеспечивает такого уровня гибкости.

См. также

[ редактировать ]
  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 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 232cffffd72440c4bc9d808cacffee95__1716975000
URL1:https://arc.ask3.ru/arc/aa/23/95/232cffffd72440c4bc9d808cacffee95.html
Заголовок, (Title) документа по адресу, URL1:
GNU Autotools - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)