web-dev-qa-db-fra.com

Que fait un ./configure typique sous Linux?

Pourquoi est-ce nécessaire alors que tout est spécifié dans un makefile?

63
Mask

En règle générale, le script de configuration lors de l'exécution:

  • Vérifiez quelques détails sur la machine sur laquelle le logiciel va être installé. Ce script recherche de nombreuses dépendances sur votre système. Pour que le logiciel particulier fonctionne correctement, il peut être nécessaire que beaucoup de choses existent déjà sur votre machine. Si l'une des principales exigences manque sur votre système, le script de configuration serait exit et vous ne pourrez pas poursuivre l'installation tant que vous n'aurez pas obtenu les éléments requis.

  • Créez le Makefile à utiliser à l'étape suivante.

62
codaddict

Il exécute un script qui produit généralement des makefiles et "configure.h".

Le script est écrit dans la langue "m4" qui est un langage macro. Les macros de niveau supérieur se trouvent dans autoconf.ac ou (dans les anciens systèmes) autoconf.in. Ces extensions contiennent des macros de niveau inférieur qui se transforment à leur tour en tests réels qui créent de petits programmes ou tâches pour vérifier le type de système que vous avez.

Par exemple, AC_CHECK_HEADER ([myheader.h], ...) peut générer un petit programme C comme:

#include "myheader.h"
int main(int argc, char** argv) {
  return 0;
}

Si le programme compile, la vérification est considérée comme "réussie" sinon elle "échoue". Le statut de ces vérifications est souvent reflété dans le fichier config.h. Lors d'une vérification réussie, vous pourriez trouver une ligne dans config.h qui ressemble à:

#define HAVE_MYHEADER_H 1

lors d'un test qui échoue, il pourrait ressembler à

#define HAVE_MYHEADER_H 0

Lorsqu'il est configuré pour fonctionner avec autoconf dans la macro AM_INIT_AUTOMAKE, le Makefile peut également référencer les résultats des tests si la variable contenant le résultat du test est exportée. Donc, si une bibliothèque nécessaire se trouve à quelques emplacements typiques différents, ou si la syntaxe de "ce qui fonctionne" avec l'un de vos outils standard (comme tar, ar, etc.) est différente, ou si l'outil préféré n'est pas disponible, le Makefile sera capable de construire le projet correctement en utilisant les différents emplacements de bibliothèque, la syntaxe des outils différents ou un ensemble d'outils différent.

Ainsi, lorsque vous traitez un projet Autotools (configure/make/make install), le Makefile ne contient vraiment pas tout ce qui est nécessaire pour construire le projet, il est généré à partir du modèle Makefile.in pour correspondre spécifiquement à votre système lorsque vous tapez "configure".

32
Edwin Buck

Un script configure construit le Makefile à partir d'un modèle, en remplaçant par exemple l'emplacement où vous voulez installer le code et les définitions nécessaires pour le compilateur (C, C++, Fortran, ...) utilisé pour construire le programme. Théoriquement, tout pourrait être fait en une seule étape, sauf qu'il y a autant de configurations différentes possibles qu'il est plus facile de le faire par étapes. (Par exemple, si vous créez un grand programme avec une machine multicœur disponible, vous voudrez peut-être spécifier qu'un certain nombre de compilations parallèles se produisent, ce qui n'est pas le souci de la façon dont les choses sont configurées.)

5
Donal Fellows