make file

PowerMike

Membre actif
26 Avril 2000
583
0
oui oui make existe bien. Mais je m'en sers pas beaucoup beaucoup. Moi j'utilise surtout ce qui est graphique du genre Project Builder qui lui fait appel à des programmes en ligne de commande pour compiler entre autres Make.

Pour plus d'information fait un man. ou un apropos make.

Pour apropos il faut construire la base de cette facon
sudo /usr/libexec/makewhatis.db
http://forums.macg.co/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=16&t=000136
 
Les fichiers Makefile sont en effet tres utilises sous UNIX, car ils peuvent contenir toutes les options necessaires pour le multi-plateforme (AIX, FreeBSD, HP-UX, OSF etc).

D'une facon generale, tu as une succession de variables qui definissent les options d'inclusion, le compilateur, les options de compilation et de linkage, tu peux avoir des compilations conditionnelles etc etc... Bref, ca devient tres vite une usine a gaz.

Le mieux, en effet, est pour toi de sortir la doc de make (man make) et d'eplucher les parametres de ton fichier un a un.

Tu devras aussi pouvoir trouver kk trucs sur les sites de dev UNIX (LINUX y compris).
 
Je dois m'amuser à porter sous Os X des programmes (en C) qui tournent sous unix.
frown.gif


Un des programmes a plein de fonctions, headers et fichiers diverses, et la construction du programme se fait avec un fichier makefile.
confused.gif


1) est-ce que y a l'équivalent sous Os X ?
(je crois que oui... mézou ?)

2) Où trouver la doc pour changer tout ça ?
(je crois pas que le même make file fonctionnera tel-quel...)

Merci
smile.gif
 
Merci à tous.
Juste un petit truc: la commande c'est makewhatis (et pas makewhatis.db)
wink.gif


Je vais essayer de me débrouiller...
 
l'utilitaire make est un programme gérant des dépendance entre fichiers (qui peuvent être de toutes sortes) et permet d'exécuter des actions quand un fichier a été modifié. make foncionne selon le principe qu'un fichier dépendant d'un autre doit être retraité (recompilé) si sa date de dernière modification est plus ancienne que celle du fichier dont il dépend.

Petit exemple: on a un module "mathmod" comprenant les fichier "mathmod.c" et "mathmod.h"; un module "blabla" comprenant les fichier "blabla.c" et "blabla.h" et utilisant les fonctions de "mathmod" et un fichier "main.c" contenant un programme utilisant les fonctions de "blabla" et de "mathmod".

Pour exprimer que "main.o" dépend de
"main.c" et qu'il doit être regéné si "main.c" change on écrit dans la makefile:

main.o : main.c #main.o dépend de main.c
tcc -c main.c

Une dépendance doit commencer sur le première caractère d'une ligne et la ou les actions à exécuter doivent suivre directement cette ligne et commencer par une tabulation.
Pour l'exemple voici ce que cela donne:

main.exe : main.obj blabla.obj mathmod.obj
tcc -emain.exe main.obj blabla.obj mathmod.obj
main.obj : main.c blabla.h mathmod.h
cc -c main.c
blabla.obj : blabla.c blabla.h mathmod.h
cc -c blabla.c
mathmod.obj : mathmod.c mathmod.h
cc -c mathmod.c


L'exemple crée un executable pour PC, mais c'est le même principe pour les autres plateformes.
On peut encore rajouter dans une makefile des variables. Les plus courantes sont les suivantes:
CC définit le compilateur C
CFLAGS option pour le compilateur
CPPFLAGS opntion pour le préprocesseur

Exemple:

CC = cc
CFLAGS = -g -Wall
CPPFLAGS =

main.o: main.c complex.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c main.o

complex.o: complex.c complex.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c complex.o

Et si j'ai tout compris le fichier configure qu'on doit exectuer avant la compilation en fait il fait ce que son nom indique c-à-d qu'il configure les différentes options de la makefile. Donc si jamais il ne trouve pas le bon compilateur (il cherche le gcc et ne le trouve pas) et ben c'est par là qu'il faut faire de modifs...

En espérant que cela vous aide un peu