Réponses:
Comme indiqué dans ce billet de blog et auquel il est fait allusion dans les conditions de configuration de GCC , --target
ne s'applique que lorsque vous compilez des chaînes d'outils. Lorsque vous effectuez une compilation croisée normale d'une bibliothèque ou d'un binaire que vous utilisez
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Toutefois, lorsque vous êtes construire toolchains, les choses peuvent se compliquer. Je pense que ce qui suit est correct (bien que je ne puisse pas dire que j'ai déjà compilé manuellement un débogueur croisé):
Disons que vous avez:
Vous configurez et construisez votre serveur de débogage (par exemple gdbserver) pour qu'il s'exécute sur votre appareil intégré avec
./configure --build=powerpc --host=mips
afin que vous puissiez coller sur votre périphérique embarqué et exécuter "gdbserver: 1234 a.out" pour démarrer le débogage et écouter sur le port 1234.
Vous construirez alors votre client de débogage (qui se connecte et contrôle le gdbserver) avec
./configure --build=powerpc --host=i686 --target=mips
que vous copieriez sur votre ordinateur portable x86 afin que dans le champ vous puissiez exécuter "gdbclient embedded.device: 1234" afin de déboguer votre programme a.out.
Tout cela s'applique également aux compilateurs pour lesquels vous voudrez peut-être consulter le lien GCC ci-dessus ou cette section sur la compilation croisée canadienne .
Notez également que, dans la pratique, il se peut que vous ne voyiez pas la build, l'hôte ou la cible spécifiés car, selon cette page de manuel Autoconf , "la cible est par défaut l'hôte, l'hôte à construire et la génération au résultat de config.guess."
En un mot, construisez le code --build
, exécutez-le --host
avec l' --target
environnement d'architecture.
Remarque: l' argument --target
n'a de sens que lors de la construction du compilateur (par exemple GCC). Lors de l'exécution configure
avant la construction de GCC:
--build
: la machine sur laquelle vous construisez--host
: la machine pour laquelle vous construisez--target
: la machine pour laquelle GCC produira le binaireÀ partir de la documentation GCC ( notes d'installation spécifiques à l'hôte / cible ):
Si la construction, l'hôte et la cible sont identiques, cela s'appelle un natif. Si la construction et l'hôte sont identiques mais que la cible est différente, cela s'appelle une croix. Si la construction, l'hôte et la cible sont tous différents, cela s'appelle un Canadien (pour des raisons obscures concernant le parti politique du Canada et les antécédents de la personne travaillant sur la construction à ce moment-là). Si l'hôte et la cible sont identiques, mais que la construction est différente, vous utilisez un compilateur croisé pour créer un natif pour un système différent. Certaines personnes appellent cela un hôte-x-hôte, un natif croisé ou un natif croisé. Si la construction et la cible sont identiques, mais que l'hôte est différent, vous utilisez un compilateur croisé pour créer un compilateur croisé qui produit du code pour la machine sur laquelle vous construisez. C'est rare, il n'y a donc pas de manière courante de le décrire. Il y a une proposition pour appeler cela un crossback.
--target
n'est pertinent pour aucun projet qui n'est pas lui-même un compilateur. Alors pourquoi est-ce une option de configuration standard? Déroutant.
configure
n'est pas exactement le summum du design bon et propre; Je suppose que c'est juste le résultat de la dérive des fonctionnalités spécifiques à l'application.
--host
et--build
. J'ai deux projets C ++ et il est impossible de construire pour Android car Autotools est tellement f ** k'd up. Il insiste pour exécuter des tests en utilisant la chaîne d'outils de l'hôte.