Le script ./configure
accepte 3 options --build
, --host
y --target
. Je confonds leurs rôles. Quelle est leur différence et leur sémantique ?
Réponses
Trop de publicités?Comme indiqué dans cet article de blog et à laquelle il est fait allusion dans le Conditions de configuration de GCC , --target
ne s'applique que lorsque vous compilez des chaînes d'outils. Lorsque vous effectuez la compilation croisée normale d'une bibliothèque ou d'un binaire, vous utilisez
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Cependant, lorsque vous sont en construisant des chaînes d'outils, les choses peuvent devenir plus compliquées. 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 :
- une machine de construction powerpc sur laquelle vous allez faire toute la compilation
- plusieurs dispositifs embarqués, avec des processeurs MIPS, sur lesquels votre code va s'exécuter.
- un ordinateur portable x86 que vous allez utiliser pour déboguer ces appareils sur le terrain
Vous devez configurer et construire votre serveur de débogage (par exemple gdbserver) pour qu'il fonctionne sur votre dispositif embarqué avec
./configure --build=powerpc --host=mips
afin que vous puissiez utiliser putty 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 construisez alors votre client de débogage (qui se connecte et contrôle le gdbserver) avec
./configure --build=powerpc --host=i686 --target=mips
que vous copiez sur votre ordinateur portable x86 afin de pouvoir, sur le terrain, exécuter "gdbclient embedded.device:1234" pour déboguer votre programme a.out.
Tout cela s'applique également aux compilateurs, pour lesquels vous pouvez consulter le lien GCC ci-dessus ou cette section sur le module de gestion de l'environnement. Croix canadienne compiler.
Notez également que, dans la pratique, il se peut que vous ne voyiez pas de build, d'hôte ou de cible spécifiés car, d'après la norme cette page du manuel Autoconf , "target prend par défaut la valeur host, host prend la valeur build, et build prend le résultat de config.guess."
En un mot, construisez le code sur --build
et l'exécuter sur --host
con --target
environnement architectural.
Note : Arguments --target
n'a de sens que lors de la construction d'un compilateur (par exemple GCC). Lors de l'exécution configure
avant de construire GCC :
-
--build
: la machine sur laquelle vous construisez -
--host
: la machine pour laquelle vous construisez -
--target
: la machine pour laquelle GCC produira des binaires
De la Documentation GCC ( Notes d'installation spécifiques à l'hôte/à la cible ):
Si le build, l'hôte et la cible sont tous les mêmes, cela s'appelle un natif. Si la construction et l'hôte sont les mêmes mais que la cible est différente, on parle de cross. Si le build, l'hôte et la cible sont tous différents, on parle de canadian (pour des raisons obscures liées au parti politique canadien et aux antécédents de la personne travaillant sur le build à ce moment-là). Si l'hôte et la cible sont les mêmes, mais que le build est différent, vous utilisez un compilateur croisé pour construire un natif pour un système différent. Certains appellent cela un host-x-host, cross native, ou cross-built native. Si le build et la cible sont les mêmes, mais que l'hôte est différent, vous utilisez un compilateur croisé pour construire un compilateur croisé qui produit du code pour la machine sur laquelle vous construisez. Ce cas est rare, il n'y a donc pas de moyen commun de le décrire. Il existe une proposition visant à appeler cela un crossback.