115 votes

Quelle est la différence entre les options "./configure" "--build", "--host" et "--target" ?

Le script ./configure accepte 3 options --build , --host y --target . Je confonds leurs rôles. Quelle est leur différence et leur sémantique ?

104voto

user124850 Points 474

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.

72voto

Delan Azabani Points 33013

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X