Відповіді:
Як зазначено в цій публікації в блозі і на яку згадується в Умовах конфігурування 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 ( конкретні примітки щодо встановлення хоста / цілі ):
Якщо збірка, хост і ціль однакові, це називається нативним. Якщо збірка та хост однакові, але ціль відрізняється, це називається хрестом. Якщо будувати, розміщувати та націлювати все - це різниця, це називається канадським (з незрозумілих причин, що стосуються політичної партії Канади та передумови людини, яка працювала над будівництвом на той час). Якщо хост і ціль однакові, але збірка відрізняється, ви використовуєте крос-компілятор для створення нативного для іншої системи. Деякі люди називають це хостом-x-хостом, перехрещеним рідним або перетвореним натурою. Якщо збірка та ціль однакові, але хост відрізняється, ви використовуєте крос-компілятор для створення компілятора перехресних даних, який створює код для машини, на якій ви будуєте. Це рідко, тому немає загального способу її опису. Є пропозиція назвати це перехресним.
--target
, що не стосується жодного проекту, який сам по собі не є компілятором. То чому це стандартний варіант налаштування? Заплутаний.
configure
не зовсім вершина хорошого та чистого дизайну; Я думаю, це лише результат повзучості функції, що залежить від програми.
--host
та--build
. У мене є два C ++ проекти, і це неможливо створити для Android, оскільки Autotools настільки f ** k'd вгору. Він наполягає на запуску тестів за допомогою інструментальної мережі хоста.