Ответы:
Как указано в этом сообщении в блоге и упоминается в Условиях настройки GCC , --target
применяется только при компиляции наборов инструментов. Когда вы выполняете обычную кросс-компиляцию библиотеки или двоичного файла, вы используете
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Тем не менее, когда вы будете строить компилированные инструменты, вещи могут получить более сложные. Я думаю, что верно следующее (хотя я не могу сказать, что когда-либо вручную компилировал кросс-отладчик):
Допустим, у вас есть:
Вы должны настроить и построить свой сервер отладки (например, gdbserver) для работы на встроенном устройстве с
./configure --build=powerpc --host=mips
так что вы можете замазать свое встроенное устройство и запустить "gdbserver: 1234 a.out", чтобы начать отладку и прослушивать порт 1234.
Затем вы должны создать свой клиент отладки (который подключается к gdbserver и управляет им) с помощью
./configure --build=powerpc --host=i686 --target=mips
который вы скопируете на свой ноутбук x86, чтобы в поле вы могли запустить «gdbclient embedded.device: 1234» для отладки вашей программы a.out.
Все это применимо и к компиляторам, для которых вы, возможно, захотите посмотреть ссылку GCC выше или этот раздел о канадской кросс- компиляции.
Также обратите внимание, что на практике вы можете не увидеть указанную сборку, хост или цель, потому что, согласно этой странице руководства Autoconf , «по умолчанию для цели используется хост, хост для сборки и сборка в результате config.guess».
Одним словом, построить код на --build
, запустить его на --host
с --target
архитектурной средой.
Примечание: аргумент --target
имеет смысл только при сборке компилятора (например, GCC). При запуске configure
перед сборкой GCC:
--build
: машина, на которой вы строите--host
: машина, для которой вы строите--target
: машина, для которой GCC будет создавать двоичный файлИз документации GCC ( примечания по установке для конкретного хоста / цели ):
Если сборка, хост и цель совпадают, это называется родным. Если сборка и хост одинаковы, но цель разная, это называется перекрестием. Если сборка, хост и цель разные, это называется канадским (по неясным причинам, связанным с политической партией Канады и предысторией человека, работавшего над сборкой в то время). Если хост и цель совпадают, но сборка различается, вы используете кросс-компилятор для создания собственного кода для другой системы. Некоторые называют это host-x-host, cross-native или cross-built native. Если сборка и цель совпадают, но хост отличается, вы используете кросс-компилятор для создания кросс-компилятора, который создает код для машины, на которой вы строите. Это редко, поэтому нет единого способа описания. Есть предложение назвать это кроссбэком.
--target
это не относится к любому проекту, который сам не является компилятором. Так почему же это стандартный вариант конфигурации? Смешение.
configure
не совсем удачный и чистый дизайн; Я предполагаю, что это просто результат расползания функций конкретного приложения.
--host
и--build
. У меня есть два проекта на C ++, и их невозможно собрать для Android, потому что Autotools сильно испорчен. Он настаивает на запуске тестов с использованием цепочки инструментов хоста.