Das Skript ./configure
akzeptiert 3 Optionen --build
, --host
und --target
. Ich verwirre ihre Rollen. Was ist der Unterschied und die Semantik von ihnen?
121
Das Skript ./configure
akzeptiert 3 Optionen --build
, --host
und --target
. Ich verwirre ihre Rollen. Was ist der Unterschied und die Semantik von ihnen?
--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.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 verwendenWenn 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
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
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.quelle
Hinweis: Argument
--target
ist nur beim Erstellen eines Compilers (z. B. GCC) sinnvoll. Beim Ausführenconfigure
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 ):
quelle
--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.