Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Система конфигурирования и сборки GNU

Система конфигурирования и сборки GNU

Иан Ланс Тейлор

Средства кросс-компиляции

Кросс-инструменты в дереве Cygnus

Дерево Cygnus используется для различных пакетов, включая gdb, GNU binutils и egcs. Оно, разумеется, используется и для релизов Cygnus.

В дереве Cygnus скрипт `configure' верхнего уровня используется старой системой конфигурирования Cygnus, а не autoconf. `Makefile.in' верхнего уровня пишется для сборки пакетов, находящихся в этом дереве исходников, и поддерживает сборку большого числа утилит за один шаг `configure'/`make'.

Дерево Cygnus может быть сконфигурировано с опцией `--target'. Опция `--target' рекурсивно применяется к каждой поддиректории и обеспечивает сборку полного набора кросс-утилит.

Библиотеки хоста и цели

Дерево Cygnus отличает библиотеки хоста от библиотек цели.

Библиотеки хоста собираются тем же компилятором, который собирает запускаемые на хосте программы и называется хозяйским компилятором. Сюда относятся такие библиотеки как `bfd' и `tcl'. Эти библиотеки собираются хозяйским компилятором и линкуются с программами вроде binutils или gcc, которые запускаются на хосте.

Библиотеки цели собираются целевым компилятором. Если gcc присутствует в дереве исходников, то целевым компилятором является gcc, который собирается с помощью хозяйского компилятора. Целевыми библиотеками являются такие библиотеки как `newlib' и `libstdc++'. Эти библиотеки не линкуются с хозяйскими программами, но, в противоположность этому, доступны для использования в программах, собираемых с помощью целевого компилятора.

Для оставшейся части этого раздела предположим, что gcc содержится в дереве исходников, так что он будет использоваться для сборки целевых библиотек.

Здесь существует некоторая сложность. Процесс конфигурирования должен знать, каким компилятором вы будете собирать средство. Иначе последующие тесты будут работать некорректно. Дерево Cygnus решает эту проблему тем, что не конфигурирует целевые библиотеки пока собирается целевой компилятор. Для того, чтобы позволить всем сборку с помощью единственного `configure'/`make', конфигурация целевых библиотек фактически срабатывает на шаге `make'.

Когда целевые библиотеки сконфигурированы, опция `--target' не используется. Вместо нее используется опция `--host' с тем же аргументом, что и опция `--target' для общей конфигурации. Если опция `--target' не использовалась для общей конфигурации, аргументом опции `--host' должен быть вывод шелл-скрипта `config.guess'. Любая опция `--build' остается без изменений.

Этот перевод опций конфигурации делается потому, что целевые библиотеки компилируются целевым компилятором, они собираются в порядке достижения цели общей конфигурации. Согласно определению хоста, их хозяйская система та же, что и целевая система общей конфигурации.

Тот же процесс используется как для нативной конфигурации, так и для кросс-конфигурации. Даже и при использовании нативной конфигурации, целевые библиотеки должны конфигурироваться и собираться с помощью ново-собранного компилятора. Это особенно важно для библиотек C++, поскольку нет оснований полагать, что компилятор C++, используемый для сборки средств хоста (даже если он один), использует тот-же ABI, как и компилятор g++, который будет использован для сборки целевых библиотек.

Существует одно различие между нативной конфигурацией и кросс-конфигурацией. В нативной конфигурации целевые библиотеки обычно конфигурируются и собираются как одноуровневые для средств хоста. При кросс-компиляции целевые библиотеки обычно собираются в поддиректории, имя которой является аргументом для `--target'. На то есть свои исторические причины.

Итак, запуск `configure' в дереве Cygnus конфигурирует все хозяйские библиотеки и средства, но не конфигурирует какие-либо целевые библиотеки. Запуск `make' осуществляет следующие шаги:

  • Собирает библиотеки хоста.
  • Собирает хозяйские программы включая gcc. Заметим, что мы вызываем gcc как хостовую программу (поскольку он запускается на хосте), так и в качестве целевого компилятора (поскольку он генерирует код для цели).
  • Использует ново-собранный компилятор цели, для конфигурирования библиотек цели.
  • Собирает библиотеки цели.

Эти шаги необязательно выполняются в указанном порядке, поскольку в действительности они контролируются целями `Makefile'.


Назад Вперед
Указание цели, Использование типа цели Скрипты конфигурирования библиотек цели

Перевод: Дмитрий Скоробогатов, 18.11.2011.
Оригинальный текст можно найти по адресу http://www.airs.com/ian/configure/configure_5.html.


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2011-12-18 04:05:58

Метки материала: gnu, система конфигурирования, система конфигурирования и сборки, компиляция, проект gnu, по, бесплатные программы, бесплатное по, софт, разработка по, soft, программное обеспечение, software, спо, документация для программиста, программное обеспечение по

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.