Antworten:
Wie in diesem Blog-Beitrag erwähnt und in den GCC-Konfigurationsbedingungen erwähnt , --target
gilt dies nur, wenn Sie Toolchains kompilieren. Wenn Sie eine normale Kreuzkompilierung einer Bibliothek oder Binärdatei durchführen, die Sie verwenden
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Wenn Sie jedoch Toolchains erstellen, können die Dinge komplizierter werden. Ich denke, dass Folgendes richtig ist (obwohl ich nicht sagen kann, dass ich jemals einen Cross-Debugger manuell kompiliert habe):
Nehmen wir an, Sie haben:
Sie würden Ihren Debugging-Server (z. B. gdbserver) so konfigurieren und erstellen, dass er auf Ihrem eingebetteten Gerät ausgeführt wird
./configure --build=powerpc --host=mips
Damit können Sie Kitt auf Ihr eingebettetes Gerät übertragen und "gdbserver: 1234 a.out" ausführen, um das Debuggen zu starten und Port 1234 abzuhören.
Sie würden dann Ihren Debugging-Client (der eine Verbindung zum GDBServer herstellt und diesen steuert) mit erstellen
./configure --build=powerpc --host=i686 --target=mips
die Sie auf Ihren x86-Laptop kopieren würden, damit Sie im Feld "gdbclient embedded.device: 1234" ausführen können, um Ihr a.out-Programm zu debuggen.
Dies gilt auch für Compiler, für die Sie möglicherweise den obigen GCC-Link oder diesen Abschnitt über die kanadische Cross- Kompilierung lesen möchten .
Beachten Sie auch, dass in der Praxis möglicherweise kein Build, Host oder Ziel angegeben wird, da laut dieser Autoconf-Handbuchseite "Ziel standardmäßig Host, Host zum Erstellen und Build zum Ergebnis von config.guess" ist.
Mit einem Wort, bauen Sie den Code auf --build
und führen Sie ihn --host
mit der --target
Architekturumgebung aus.
Hinweis: Argument --target
ist nur beim Erstellen eines Compilers (z. B. GCC) sinnvoll. Beim Ausführen configure
vor dem Erstellen von GCC:
--build
: die Maschine, auf der Sie bauen--host
: die Maschine, für die Sie bauen--target
: Die Maschine, für die GCC Binärdateien erstelltAus der GCC-Dokumentation ( Host / Target-spezifische Installationshinweise ):
Wenn Build, Host und Ziel identisch sind, wird dies als nativ bezeichnet. Wenn Build und Host identisch sind, das Ziel jedoch unterschiedlich ist, wird dies als Kreuz bezeichnet. Wenn Build, Host und Ziel unterschiedlich sind, spricht man von einem Kanadier (aus obskuren Gründen, die sich mit Kanadas politischer Partei und dem Hintergrund der Person befassen, die zu diesem Zeitpunkt an dem Build arbeitet). Wenn Host und Ziel identisch sind, der Build jedoch unterschiedlich ist, verwenden Sie einen Cross-Compiler, um einen Native für ein anderes System zu erstellen. Einige Leute nennen dies einen Host-x-Host, einen gekreuzten Eingeborenen oder einen gekreuzten Eingeborenen. Wenn Build und Target identisch sind, der Host jedoch unterschiedlich ist, verwenden Sie einen Cross-Compiler, um einen Cross-Compiler zu erstellen, der Code für den Computer erzeugt, auf dem Sie aufbauen. Dies ist selten, daher gibt es keine übliche Art, es zu beschreiben. Es gibt einen Vorschlag, dies als Crossback zu bezeichnen.
--target
ist für kein Projekt relevant, das selbst kein Compiler ist. Warum ist es eine Standardkonfigurationsoption? Verwirrend.
configure
ist nicht gerade ein Höhepunkt für gutes und sauberes Design; Ich denke, es ist nur ein Ergebnis des anwendungsspezifischen Feature-Creep.
--host
und--build
. Ich habe zwei C ++ - Projekte und es ist unmöglich, für Android zu bauen, weil Autotools so verrückt ist. Es besteht darauf, Tests mit der Toolchain des Hosts auszuführen.