Pages : 1
#1 Le 06/04/2008, à 11:23
- binoua
[résolu]Faire un Makefile
Yop all,
Je suis un fervent défenseur de la compilation brutale dans le bash. Néanmoins, je sens que cette ligne de défense ne tiendra pas bien longtemps !!
Bref je me met au Makefile et j'ai quelques problèmes. Notamment celui qui suit.
J'ai différent .c qui sont tous dépendant du même .h.
En fait j'aimerai savoir s'il y a un moyen de faire en sorte qu'il me compile chaque fichier du répertoire sans pour autant avoir à tous les taper (vous me suivez ??).
Voila l'état actuel de mon Makefile.
CC = gcc
CFLAGS = -c -Wall -I./include
LDFLAGS = -lgsl -lgslcblas
EXEC = ./bin/projet.exe
all = $(EXEC)
./bin/projet.exe : main.o matrice.o
$(CC) $(LDFLAGS) -o $@ $^
main.o : ./src/main.c ./include/projet.h
matrice.o : ./src/matrice.c ./include/projet.h
%.o : %.c
$(CC) $(CFLAGS) $<
clean :
rm *.o
Inutile de dire que ça ne marche pas.
Une remarque ? Un conseil ?
Merci à tous
Dernière modification par binoua (Le 07/04/2008, à 11:11)
Hors ligne
#2 Le 06/04/2008, à 11:41
- human enemy
Re : [résolu]Faire un Makefile
Faire un makefile à la main arffffff !
Le minimum c'est d'utiliser les autotools si vraiment tu ne veux pas d'IDE.
<linux user>463160</linux user>
str = g_strdup_printf ("ubuntu user : %d",20328);
Hors ligne
#3 Le 06/04/2008, à 11:43
- Le Farfadet Spatial
Re : [résolu]Faire un Makefile
Salut à tous !
Évidemment : ça ne peut pas fonctionner ! En effet, la ligne suivante :
%.o: %.c
$(CC) $(CFLAGS) $<
Va chercher les fichiers .c dans le répertoire courant pour les compiler. Or, visiblement, tes sources ne sont pas dans le répertoire courant, mais dans /src.
Connais-tu makedepend ? Ça te sera sans doute très utile.
Sinon, juste une habitude : sous UNIX et par extension sous Linux, on ne met généralement pas d'extension .exe aux exécutables : ce n'est pas le nom du fichier qui fait ses caractéristiques.
À bientôt.
Le Farfadet Spatial
Hors ligne
#4 Le 06/04/2008, à 12:00
- binoua
Re : [résolu]Faire un Makefile
Merci bien.
Effectivement j'avais zappé ce détail !!
Au passage je sais bien que ce n'est pas le fait de mettre .exe qui rend mon fichier exécutable. Néanmoins je trouve utile de mettre une extension aux fichiers afin de savoir qui ils sont.
Du reste je vois régulièrement des programmes compilés par d'autres que moi portant de telles extensions.
Est-ce réellement une règle implicite ??
Hors ligne
#5 Le 06/04/2008, à 13:39
- Orion Elenion
Re : [résolu]Faire un Makefile
Pour moi, c'est surtout gênant par le fait que ça rappelle Windows...
Ubuntu is an ancient african word meaning : "I can't configure Debian".
Hors ligne
#6 Le 06/04/2008, à 13:43
- Le Farfadet Spatial
Re : [résolu]Faire un Makefile
Salut à tous !
Du reste je vois régulièrement des programmes compilés par d'autres que moi portant de telles extensions.
Est-ce réellement une règle implicite ??
C'est un usage. En fait, la règle de l'extension .exe viens de CP/M, le système d'exploitation le plus utilisé à la fin des années 70 et au début des années 80 pour les micro-ordinateurs alors naissants. La faible quantité de mémoire ne permettait pas de mettre en place des propriétés de fichier comme UNIX le proposait. D'où l'idée d'associer une extension au nom de fichier, indiquant de quoi il s'agit (c'était plus simple à mettre en place). MS-DOS est un héritier directe de CP/M (la première version en est pour ainsi dire une ré-implémentation) et, notamment, partage cette particularité, qui s'est d'ailleurs propagée à Microsoft Windows.
Sous UNIX et ses dérivés, les fichiers possèdent des propriétés claires, qui, notamment, indiquent si le fichier est exécutable ou non. D'ailleurs, un fichier exécutable apparaît --- cela dépend de la configuration, mais c'est généralement le cas --- dans une couleur différente dans la console ou avec une icône l'indiquant comme exécutable. L'extension .exe est donc superflue et redondante, puisqu'elle n'apporte aucune information nouvelle.
Le fait d'utiliser des extensions .c et .o est simplement pour simplifier la gestion des noms, parce qu'il faut trouver un nom qui ne soit pas déjà pris et qui soit explicite entre le code source et le fichier objet. De plus, cela simplifie la vie du compilateur pour reconnaître le langage dans lequel est écrit le code source lorsque ledit compilateur supporte plusieurs langages, sachant que les différences ne sont pas toujours simples à mettre en évidence avec une analyse automatique du code. Cela dit, il ne s'agit pas exactement d'extensions : un nom de fichier peut avoir plusieurs points, c'est même assez fréquent. Par exemple : program.1.9, ou encore archive.06.04.2008.
Maintenant, puisque l'extension n'a pas d'influence sur les propriétés du fichier, fondamentalement : tu fais ce que tu veux !
À bientôt.
Le Farfadet Spatial
Hors ligne
#7 Le 06/04/2008, à 13:58
- binoua
Re : [résolu]Faire un Makefile
thks
je suis fan des petits cours d'histoire en passant.
Merci à tous, et spécialement au Farfadet Spatial !!!
Hors ligne
#8 Le 06/04/2008, à 14:47
- Le Farfadet Spatial
Re : [résolu]Faire un Makefile
Salut à tous !
Tiens, je n'avais pas fait attention à ça :
Faire un makefile à la main arffffff !
Le minimum c'est d'utiliser les autotools si vraiment tu ne veux pas d'IDE.
Pourtant, ce n'est pas nécessairement une mauvaise idée de faire ses Makefiles à la main : par exemple, si tu n'utilises que la bibliothèque standard et des bibliothèques propres à ton programme, voire pas la bibliothèque standard (exemple : le noyau Linux), les autotools ne vont pas apporter grand-chose. En plus, les autotools, c'est tout de même un bon moyen de s'arracher les cheveux... Et puis, avec ou sans environnement de développement intégré, il est bon de savoir ce que font les outils que l'on utilise, notamment s'ils produisent des Makefiles : même lorsque tu utilises un environnement de développement, tu peux être amené à faire des modifications dans les divers fichiers de configurations.
Cela dit, plutôt que les autotools ou même CMake, finalement, je conseille Scons : c'est vraiment impressionnant.
À bientôt.
Le Farfadet Spatial
Hors ligne
#9 Le 06/04/2008, à 17:01
- binoua
Re : [résolu]Faire un Makefile
D'un point de vue éthique, je m'interdis d'utiliser un outil dont je ne comprends pas le fonctionnement...
En plus je trouve qu'au final le faire à la main ce n'est pas très dur donc...
Hors ligne
#10 Le 06/04/2008, à 17:57
- Le Farfadet Spatial
Re : [résolu]Faire un Makefile
Salut à tous !
Cela dit, lorsque le projet devient complexe, la mise au point de Makefile devient plus délicate. De plus, si tu veux faire un projet multi-plateforme, alors pas le choix : il faut en passer au moins par les autotools ou mieux CMake, Scons et consorts. Donc, ce sont des outils à ne pas négliger non plus.
Par contre, il est certain qu'il est préférable de ne pas utiliser quelque chose sans bien savoir comment ça fonctionne.
Si ton problème est réglé, pense à mettre la balise [Résolu] dans le titre de ton message.
À bientôt.
Le Farfadet Spatial
Dernière modification par Le Farfadet Spatial (Le 06/04/2008, à 17:58)
Hors ligne
#11 Le 06/04/2008, à 18:04
- binoua
Re : [résolu]Faire un Makefile
certes...
cela dit je ne suis pas expert en forum !!! comment on fait ?!!
Hors ligne
#12 Le 06/04/2008, à 18:07
- JBF
Re : [résolu]Faire un Makefile
D'un point de vue éthique, je m'interdis d'utiliser un outil dont je ne comprends pas le fonctionnement...
En plus je trouve qu'au final le faire à la main ce n'est pas très dur donc...
Oui, et puis si tu sais faire un makefile à la main, tu peux faire avec pas mal d'autres choses que simplement compiler et produire un exécutable. Par exemple exécuter des tests automatiques de ton programme.
JBF
LibreOffice : https://fr.libreoffice.org/ (téléchargement, documentation, FAQ, assistance, contribuer, ...)
Aide pour LibreOffice par la communauté francophone : Ask LibreOffice
Hors ligne
#13 Le 06/04/2008, à 19:30
- binoua
Re : [résolu]Faire un Makefile
ça ou encore faire des archives de manière automatisée ...
Hors ligne
#14 Le 06/04/2008, à 20:20
- human enemy
Re : [résolu]Faire un Makefile
Salut à tous !
Cela dit, lorsque le projet devient complexe, la mise au point de Makefile devient plus délicate. De plus, si tu veux faire un projet multi-plateforme, alors pas le choix : il faut en passer au moins par les autotools ou mieux CMake, Scons et consorts. Donc, ce sont des outils à ne pas négliger non plus.
Par contre, il est certain qu'il est préférable de ne pas utiliser quelque chose sans bien savoir comment ça fonctionne.
Si ton problème est réglé, pense à mettre la balise [Résolu] dans le titre de ton message.
À bientôt.
Le Farfadet Spatial
Bon ben là t'as tout dit.
Pour un projet simple pas multi-plateforme le makefile simple est rapide à faire à la main.
Mais dès qu'un projet croit en complexité cela devient du sport...
Avec les autotools (pas essayé les autres que tu cites ...) une 40aine de lignes dans un config.ac et un makefile.am générent un makefile 10 à 20 fois plus gros ultra complet qui te permettra de
compiler
installer
nettoyer
archiver
et plein d'autres choses encore.
Sinon, je partage le point de vue qui consiste à dire qu'il est important de comprendre ce que l'on fait.
<linux user>463160</linux user>
str = g_strdup_printf ("ubuntu user : %d",20328);
Hors ligne
#15 Le 07/04/2008, à 06:49
- Le Farfadet Spatial
Re : [résolu]Faire un Makefile
Salut à tous !
certes...
cela dit je ne suis pas expert en forum !!! comment on fait ?!!
Sur ton premier message, clique sur [Modifier]. Là, dans ton titre, ajoute la balise [Résolu].
À bientôt.
Le Farfadet Spatial
Hors ligne
Pages : 1