2010-03-27 4 views

Répondre

60

En général, le script de configuration quand exécution de la fonction:

  • Vérifiez quelques détails sur la machine sur lequel le logiciel va être installé . Ce script vérifie les nombreuses dépendances sur votre système. Pour que le logiciel fonctionne correctement , il peut être nécessaire d'avoir un lot de choses à être déjà sur votre machine . Si l'une des principales exigences est manquante sur votre système, le script de configuration exit et vous ne pouvez pas procéder à l'installation, jusqu'à ce que vous obteniez les choses requises.

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

+3

Ne sait jamais que makefile a été créé par configure avant :) – Mask

+2

Il fournit également une interface pour configurer (judicieusement) les options de compilation. './configure --help' donnera (habituellement?) une liste des options disponibles. – intuited

+0

votez pour le detail du makefile – jayatubi

5

Un script de configuration construit le Makefile à partir d'un modèle, en remplaçant dans des choses comme où vous souhaitez installer le code et quelles définitions sont nécessaires pour le (C, C++, Fortran, ...) compilateur utilisé pour construire le programme. Théoriquement, tout peut être fait en une seule étape, sauf qu'il y a autant de configurations différentes possibles qu'il est plus facile de faire par étapes. (Par exemple, si vous construisez un grand programme avec une machine multicœur disponible, vous pouvez spécifier qu'un certain nombre de compilations parallèles se produisent, ce qui n'est pas la question de savoir comment les choses sont configurées.)

32

script qui produit typiquement makefiles et "configure.h".

Le script est écrit dans le lanugage "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 développent à leur tour en tests réels qui créent de petits programmes ou tâches pour vérifier quel type de système vous avez.

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

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

Si le programme compile, le contrôle est considéré comme "passage" sinon il "échoue" . Le statut de ces vérifications est souvent reflété dans le fichier config.h. Sur un contrôle de passage, vous trouverez peut-être une ligne 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 travailler avec autoconf dans AM_INIT_AUTOMAKE macro, 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 est située à quelques endroits différents, ou que la syntaxe de "ce qui marche" avec un de vos outils standards (comme tar, ar, etc) est différente, ou que l'outil préféré n'est pas disponible, le Makefile sera capable de construire correctement le projet en utilisant les différents emplacements de bibliothèque, la syntaxe d'outil différente ou un ensemble d'outils différent. Donc, lorsqu'il s'agit d'un projet Autotools (configure/make/make install), le Makefile ne contient pas tout le 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 ".

+0

J'ai remarqué que ces fichiers 'configure' sont extrêmement volumineux, sont-ils écrits manuellement? – Mask

+10

Non, le script configure est une extension (utilisant également le langage m4) des directives qui sont placées dans le fichier configure.ac (ou dans les anciens systèmes configure.in). L'exécution d'autoconf générera le script configure à partir de configure.ac, mais vous devrez parfois patcher les bibliothèques de macros. Lorsque vous avez besoin de faire cela, lancez aclocal et il va essayer de vérifier que toutes les macros sont correctement définies (et utilisables pour la prochaine exécution d'autoconf). –

+0

@Edwin Buck: excellente réponse! – Lazer