В чем разница "./ настроить "option" --build", "--host"и" --target"?

скрипт ./configure принимает 3 варианта --build, --host и --target. Я путаю их роли. В чем их отличие и семантика?

2 ответов


как отметил в этот блог и говорится в GCC настроить условия, --target применяется только при компиляции инструментов. Когда вы делаете обычную кросс-компиляцию библиотеки или двоичного файла, вы используете

--build=the architecture of the build machine
--host=the architecture that you want the file to run on

Впрочем, когда вы are building toolchains, все может стать более сложным. Я думаю, что следующее правильно (хотя я не могу сказать, что я когда-либо вручную скомпилировал кросс-отладчик):

позволяет сказать, что у вас есть:

  • машина сборки powerpc, на которой вы собираетесь делать ВСЮ компиляцию
  • несколько встроенных устройств с процессорами mips, на которых будет выполняться ваш код
  • ноутбук x86, который вы собираетесь использовать для отладки этих устройств в поле

вы бы настроить и построить сервер отладки (например, gdbserver) для работы на встроенном устройстве с

./configure --build=powerpc --host=mips

чтобы вы могли замазка на встроенное устройство и запустите " gdbserver: 1234 a.out", чтобы начать отладку и прослушать порт 1234.

затем вы создадите свой клиент отладки (который подключается к gdbserver и управляет им) с помощью

./configure --build=powerpc --host=i686 --target=mips 

который вы скопируете на свой ноутбук x86, чтобы в поле вы могли запустить " gdbclient embedded.устройство: 1234" для отладки вашего a.вне программы.

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

также обратите внимание, что на практике вы можете не видеть build, host или target, потому что, согласно эта страница руководства Autoconf, "целевые значения по умолчанию хост, хост для сборки и сборка в результате конфигурации.догадка."

одним словом, создайте код на --build запустите его на --host С --target архитектура среды.


Примечание: аргумент --target имеет смысл только при создании компилятора (например, GCC). При запуске configure перед построением GCC:

  • --build: машина, на которой вы строите
  • --host: машины, здания
  • --target: машина, которая GCC будет производить двоичный файл для

С документация GCC (хост/целевые установки Примечания):

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