web-dev-qa-db-fra.com

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

Le script ./configure accepte 3 options --build, --Host et --target. Je confonds leurs rôles. Quelle est la différence et la sémantique d'entre eux?

107
Eonil

Comme indiqué dans cet article de blog et mentionné dans le Termes de configuration de GCC , --target s'applique uniquement 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

Cependant, lorsque vous construisez 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 cross-debugger):

Disons que vous avez:

  • une machine de construction powerpc sur laquelle vous allez faire toute la compilation
  • plusieurs périphériques intégrés, avec les processeurs mips, sur lesquels votre code sera exécuté
  • 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 l’exécuter sur votre périphérique intégré avec

./configure --build=powerpc --Host=mips

afin que vous puissiez puTTY sur votre périphérique intégré et exécutez "gdbserver: 1234 a.out" pour démarrer le débogage et écouter sur le port 1234.

Vous construirez ensuite votre client de débogage (qui se connecte et contrôle le serveur gdbserver) avec

./configure --build=powerpc --Host=i686 --target=mips 

copiez sur votre ordinateur portable x86 afin de pouvoir exécuter sur le terrain "gdbclient embedded.device: 1234" afin de déboguer votre programme a.out.

Ceci s'applique également aux compilateurs pour lesquels vous pouvez consulter le lien GCC ci-dessus ou cette section sur la compilation croix canadienne .

Notez également que, dans la pratique, il se peut que vous ne voyiez pas la construction, l’hôte ou la cible spécifiés car, conformément à cette page de manuel Autoconf , "la cible par défaut est Hôte, l’hôte à construire et le résultat de config .deviner."

Dans un mot, générez le code sur --build, lancez-le sur --Host avec --target environnement architectural.

98
user124850

Remarque: Argument --target n’a de sens que lors de la compilation du compilateur (par exemple, GCC). Lorsque vous exécutez configure avant de créer GCC:

  • --build: la machine sur laquelle vous construisez
  • --Host: la machine pour laquelle vous construisez
  • --target: la machine que GCC produira en binaire

À partir de la documentation GCC ( Notes d'installation spécifiques à l'hôte/à la cible ):

Si build, Host et target sont tous identiques, cela s'appelle un natif. Si build et Host 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 canadien et les antécédents de la personne travaillant sur la construction à ce moment-là). Si hôte et cible sont identiques, mais que la construction est différente, vous utilisez un compilateur croisé pour créer un système natif pour un système différent. Certaines personnes appellent cela un hôte-x-hôte, natif croisé ou natif croisé. Si build et target sont identiques, mais que Host 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 moyen courant de le décrire. Il y a une proposition d'appeler cela un crossback.

68
Delan Azabani