Pourquoi est-il nécessaire alors que tout est spécifié dans un fichier makefile?Que fait un ./configure typique sous Linux?
Répondre
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.
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.)
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 ".
J'ai remarqué que ces fichiers 'configure' sont extrêmement volumineux, sont-ils écrits manuellement? – Mask
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). –
@Edwin Buck: excellente réponse! – Lazer
- 1. Comment créer un progiciel sous Unix/Linux
- 2. Que fait readlink systemcall?
- 3. Que fait "make check"?
- 4. L'équivalent de ./configure dans Windows?
- 5. Que signifie donner un processus CAP_SYS_RAWIO sous Linux?
- 6. Supprimer un noyau sous Linux?
- 7. Possible d'utiliser un fichier .dll sous Linux
- 8. Compilez un script PHP sous Linux
- 9. Que fait android.R.layout? Un aperçu
- 10. gérer SIGSEGV sous Linux?
- 11. Echange sous Linux
- 12. Quand j'écris un script python pour exécuter Devenv avec configure « Debug | Win32 » il ne fait rien
- 13. Développement sous GUI sous Linux
- 14. Comment déverrouiller un dossier/fichier sous Linux
- 15. Cookies Firefox sous Linux
- 16. Formater un fichier sous Unix/Linux?
- 17. Fichiers objets dans un exécutable sous Linux
- 18. Comment renommer un processus sous Linux?
- 19. Hibernate configure comment créer un objet
- 20. Comment nommer un thread sous Linux?
- 21. Construire un module perl Windows sous Linux
- 22. Que fait() dans une définition de sous-routine en Perl?
- 23. Programmation Flash sous Linux
- 24. Que fait ce code?
- 25. Que fait réellement "OperationContext.Current.GetCallbackChannel"?
- 26. Construire 32 bits sur Linux 64 bits en utilisant un automake configure script?
- 27. Quelle est la vitesse typique que PHP connecte à MySQL?
- 28. Exécutez .NET exe sous Linux
- 29. Sous linux: écriture dans un FIFO
- 30. Symfony sfPHPExcelPlugin sous Linux
Ne sait jamais que makefile a été créé par configure avant :) – Mask
Il fournit également une interface pour configurer (judicieusement) les options de compilation. './configure --help' donnera (habituellement?) une liste des options disponibles. – intuited
votez pour le detail du makefile – jayatubi