Le script ./configure
accepte 3 options --build
, --host
et --target
. Je confond leurs rôles. Quelle est leur différence et leur sémantique?
121
Le script ./configure
accepte 3 options --build
, --host
et --target
. Je confond leurs rôles. Quelle est leur différence et leur sémantique?
--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.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 utilisezToutefois, 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
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
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.la source
Remarque: l' argument
--target
n'a de sens que lors de la construction du compilateur (par exemple GCC). Lors de l'exécutionconfigure
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 ):
la source
--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.