Скрипт ./configure
принимает 3 варианта --build
, --host
и --target
. Я путаю их роли. В чем их разница и семантика?
121
Скрипт ./configure
принимает 3 варианта --build
, --host
и --target
. Я путаю их роли. В чем их разница и семантика?
--host
и--build
. У меня есть два проекта на C ++, и их невозможно собрать для Android, потому что Autotools сильно испорчен. Он настаивает на запуске тестов с использованием цепочки инструментов хоста.Ответы:
Как указано в этом сообщении в блоге и упоминается в Условиях настройки GCC ,
--target
применяется только при компиляции наборов инструментов. Когда вы выполняете обычную кросс-компиляцию библиотеки или двоичного файла, вы используетеТем не менее, когда вы будете строить компилированные инструменты, вещи могут получить более сложные. Я думаю, что верно следующее (хотя я не могу сказать, что когда-либо вручную компилировал кросс-отладчик):
Допустим, у вас есть:
Вы должны настроить и построить свой сервер отладки (например, gdbserver) для работы на встроенном устройстве с
так что вы можете замазать свое встроенное устройство и запустить "gdbserver: 1234 a.out", чтобы начать отладку и прослушивать порт 1234.
Затем вы должны создать свой клиент отладки (который подключается к gdbserver и управляет им) с помощью
который вы скопируете на свой ноутбук x86, чтобы в поле вы могли запустить «gdbclient embedded.device: 1234» для отладки вашей программы a.out.
Все это применимо и к компиляторам, для которых вы, возможно, захотите посмотреть ссылку GCC выше или этот раздел о канадской кросс- компиляции.
Также обратите внимание, что на практике вы можете не увидеть указанную сборку, хост или цель, потому что, согласно этой странице руководства Autoconf , «по умолчанию для цели используется хост, хост для сборки и сборка в результате config.guess».
Одним словом, построить код на
--build
, запустить его на--host
с--target
архитектурной средой.источник
Примечание: аргумент
--target
имеет смысл только при сборке компилятора (например, GCC). При запускеconfigure
перед сборкой GCC:--build
: машина, на которой вы строите--host
: машина, для которой вы строите--target
: машина, для которой GCC будет создавать двоичный файлИз документации GCC ( примечания по установке для конкретного хоста / цели ):
источник
--target
это не относится к любому проекту, который сам не является компилятором. Так почему же это стандартный вариант конфигурации? Смешение.configure
не совсем удачный и чистый дизайн; Я предполагаю, что это просто результат расползания функций конкретного приложения.