Уточнение параметров «./configure» «--build», «--host» и «--target» - PullRequest
0 голосов
/ 28 октября 2018

Скрипт ./configure принимает параметры --build, --host и --target.Прочитав несколько постов и статей, я все еще не понимаю, что это за опции и какое программное обеспечение они включают.

Вот фрагмент трех терминов на веб-сайте GNU:

Существует три имени системы, о которых знает сборка: машина, на которой вы строите (сборка), машиначто вы создаете для (хоста), и машина, для которой GCC будет создавать код (для цели).Когда вы конфигурируете GCC, вы указываете их с помощью --build =, --host = и --target =.

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

На что именно они ссылаются при использовании термина «надстройка» или «надстройка для»?Из поста, который я прочитал, кажется, что «наращивание» относится к системе, используемой для компиляции отладчика или компилятора, а хост - это система, которая запускает отладчик или компилятор.

Пример, с которым я столкнулся в эта статья сбила меня с толку именно тем, что "build" означает "build":

  • build: сборочная машина powerpc, которую вы собираетесь делать всей компиляцией на
  • host: ноутбук x86, который вы собираетесь использовать для отладки этих устройств в поле
  • target: несколько встроенных устройств с процессорами MIPS, на которых ваш код будет работать на

Поскольку PowerPC выполняет компиляцию для устройств MIPS, означает ли это, что это хост, а также сборка?Означает ли это также, что системы, на которых выполняется программное обеспечение для отладки, также классифицируются как хост-системы?

Согласно этой статье в комментарии пользователя упоминается, что:

  • build = где я компилирую
  • host = где компилятор будет запускаться
  • target = какой код будет генерировать компилятор

Так что это означает, что системы работаюткомпиляторы, компоновщики и отладки могут быть классифицированы как «хосты»?Так что же включает в себя программное обеспечение «на основе»?

Вот еще один фрагмент с сайта GNU:

Если сборка, хост и цель одинаковы, это называетсяродные.Если build и host одинаковы, но target отличается, это называется крестом.Если сборка, хост и цель различны, это называется канадцем (по непонятным причинам, связанным с политической партией Канады и происхождением человека, работавшего над сборкой в ​​то время).Если хост и цель совпадают, но сборка отличается, вы используете кросс-компилятор для сборки нативного кода для другой системы.Некоторые люди называют это host-x-host, пересеченный нативный или перекрестный нативный.Если build и target одинаковы, но host отличается, вы используете кросс-компилятор для построения кросс-компилятора, который генерирует код для машины, на которой вы строите.Это редко, поэтому нет общего способа описать это.Есть предложение назвать это кроссбеком.

Я понимаю это следующим образом:

  • Native - моя машина x86_64, которую я запускаю и тестирую, моя программа является нативной,Компилятор / компоновщик (gcc) был скомпилирован и установлен при установке ОС, я использую gcc для компиляции своего кода, который я запускаю на той же машине.
  • Cross - теперь это крест, если я использую тот жеМашина x86_64 для компиляции кода для устройства MIPS.Машина x86_64 - это хост / сборка, а устройство MIPS - цель.
  • Canadian - выпущена более новая версия GCC, и я решаю использовать другую машину (PowerPC2) для компиляции и тестирования нового компилятора.Любая будущая компиляция компиляторов будет сделана здесь, и gcc будет развернут на моем x86_64 после успешного тестирования.Таким образом, PowerPC2 теперь является сборкой, система X86_64 - хостом, а устройство MIPS - целевым.
  • Кросс-компилятор - мы сохраним систему сборки как PowerPC2, но теперь я скомпилировал и запустил код на том же хосте x86_64.
  • Последняя настройка довольно странная, и она утверждает, что "нет ничего общегоспособ описать, когда сборка и цель совпадают, но хост отличается ".Зачем вам настраивать систему таким образом?

1 Ответ

0 голосов
/ 28 октября 2018

С «нормальным» программным обеспечением все не так сложно: у вас есть система сборки (где программное обеспечение компилируется) и хост-система (где она будет работать).Часто эти два идентичных (вы производите программное обеспечение в вашей системе для вашей системы);но иногда это не так, обычно, если хост-система не подходит для компиляции программного обеспечения, как со встроенными устройствами, или когда она (пока) недоступна.Эта настройка - когда программное обеспечение компилируется в одной системе (тип), но будет работать в другой системе (тип) - называется кросс-компиляцией.

Если вы компилируете компилятор, хотя третья система вступает в игру, потому что компиляторВы можете построить кросс-компилятор.Система, для которой компилятор создает код, называется системой target .Часто сборка и хост-система будут одинаковыми - ваш новый компилятор будет работать на машине, на которой вы его собираете, что, очевидно, хорошо подходит для компиляции программного обеспечения - но иногда это не так;в этом случае вы создаете компилятор (сборку), который будет работать на другой системе (хосте), где он будет генерировать код для еще одной системы (цели).

Запись , на которую вы ссылаетесь описывает похожий сценарий, но для отладчика, который разделен на две части.Одна часть, сервер, работает на отлаживаемом устройстве, другая часть, клиент gdb, работает на ноутбуке x86, подключенном к встроенному устройству.

Теперь отладчик, похожий на декомпилятор, похож на компилятор в том, что он обрабатывает машинный код определенной архитектуры.Как и компилятор, не все части отладчика должны работать на отлаживаемой машине;у нас может быть «кросс-отладчик» с host (где он работает) и target (какую архитектуру он понимает).Это сценарий здесь.На отлаживаемом встроенном устройстве

работает
  • a gdbserver и клиент gdb , работающий на "реальной машине", подключающейсяна сервер на встроенном устройстве.

Для обеих частей отладчика target - это встроенные устройства MIPS, даже если они не генерируют код, а интерпретируют его.

Для клиента gdb сборка, хост и целевые системы различны: он построен на PowerPC, размещен на x86 и нацелен на - или понимает архитектуру -MIPS встроенные системы.Для сервера gdb хост и целевая система идентичны (поскольку она работает на встроенном устройстве MIPS, архитектуру которого она понимает).

Поскольку host и target идентичны, у нас есть классическая кросс-компиляция для сервера;достаточно просто определить «хост», потому что «target» по умолчанию равен «host», если не указано явно.

...