|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour a tous,
J'ai un repertoire d'executables ainsi qu'un repertoire contenant les sources d'une librairie "maison". Chacun de ces repertoires est doté d'un makefile. Lorsque je modifie les sources de la librairie, il me faut a la fois tout recompiler la librairie mais également tous les executables. Ya certainement un probleme de dependance mais je n'ai pas trouvé ou la modifier. Voici les deux makefile pour les intéressés: 1. Pour les executables: ####################################### BIN = /nfs/data2/arslan/demo_cesbio/bin/ LIB_PERSO = -L/adresselib INC_PERSO = -I$(HOME)/common/include/greg -I../libstats -I../btoolbox -I$(HOME)/common/include LIB_INRIMAGE = -L/usr/local/inrimage/lib FLAG_INR = -linrimage -lm FLAG_GREG = -lgreg FLAG_BTOOLBOX = -lbToolBox FLAG_LIBSTATS = -lstats -lrf CFILES = prog1.c \ prog2.c \ ..... EOBJS = prog1.o \ prog2.o \ ..... PROGS = prog1 \ prog2 \ .... INC = -I/usr/local/inrimage/include $(INC_PERSO) -I. LIB = $(LIB_PERSO) $(LIB_INRIMAGE) $(FLAG_LIBSTATS) $(FLAG_BTOOLBOX) $(FLAG_INR) $(FLAG_GREG) CFLAGS = -Wall -O2 -g $(INC) LIBS = $(LIB) CC = gcc all : $(PROGS) prog1 : prog1.o $(CC) $< -o $@ $(LIB) prog2 : prog2.o $(CC) $< -o $@ $(LIB) etc... install: $(PROGS) cp $(PROGS) $(BIN) clean : rm -f $(COBJS) $(EOBJS) *~ ##################################" 2. Pour la librairie: ################################ DEST = adresse de destination de la librairie libstats LIB_INRIMAGE = -L/usr/local/inrimage/lib FLAG_INR = -linrimage -lm -lrf FLAG_GREG = -lgreg FLAG_BTOOLBOX = -lbToolBox FLAG_LIBSTATS = -lstats LIB_PERSO = -L$(DEST)/lib -L$(HOME)/common/lib INC_PERSO = -I$(HOME)/common/include/greg -I. -I../btoolbox -I$(HOME)/common/include CFILES = prog3.c \ prog4.c \ ..... COBJS = prog3.o \ prog4.o \ ..... INC = -I/usr/local/inrimage/include $(INC_PERSO) -I. LIB = $(LIB_PERSO) $(LIB_INRIMAGE) $(FLAG_LIBSTATS) $(FLAG_BTOOLBOX) $(FLAG_INR) $(FLAG_GREG) ..c.o:; gcc -Wall -O2 -g $(INC) -c $*.c ; all : libstats.a libstats.a: $(COBJS) rm -f libstats.a ar r libstats.a $(COBJS) ranlib libstats.a cp libstats.a $(DEST)/lib/libstats.a clean : rm -f $(COBJS) $(EOBJS) *~ ################################ Merci du coup de main. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Emmanuel Fleury wrote:
> > Comment génères-tu tes .o ? Est-ce que le Makefile détermines cela > automatiquement ? (et si c'est le cas, il doit inclure les bibliothèques > statiques dans les dépendances par excès de zèle). Je voulais dire: Comment génères-tu tes .o dans le premier Makefile. Désolé ! :-/ Amicalement -- Emmanuel Fleury | Office: 211 Associate Professor, | Phone: +33 (0)5 40 00 35 24 LaBRI, Domaine Universitaire | Fax: +33 (0)5 40 00 66 69 351, Cours de la Libération | email: emmanuel.fleury@labri.fr 33405 Talence Cedex, France | URL: http://www.labri.fr/~fleury |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Emmanuel Fleury wrote:
> Emmanuel Fleury wrote: > >>Comment génères-tu tes .o ? Est-ce que le Makefile détermines cela >>automatiquement ? (et si c'est le cas, il doit inclure les bibliothèques >>statiques dans les dépendances par excès de zèle). > > > Je voulais dire: Comment génères-tu tes .o dans le premier Makefile. Bonne question. Je n'en ai aucune idée. A vrai dire, ce makefile était déja écris. La librairie contient un certain nombre de fichiers source (écris en C). le makefile correspondant a l'air de construire les ".o" à l'aide de la ligne: ..c.o:; gcc -Wall -O2 -g $(INC) -c $*.c ; L'autre repertoire contient les executables (aussi ecris en C). Et la, par contre, je ne vois pas comment il fabrique les ".o". Si je modifie le source d'un des excutables, je suis obligé de recompiler la librairie, et ensuite seulement je compile le repertoire d'executables, en tapant à la suite (d'abord dans le REP librairie): make clean && make cd ../REP_EXE/ make clean && make install C'est donc assez fastidieux. Mais ça a le mérite de marcher. Une idée? > > Désolé ! :-/ > > Amicalement |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Zulfukar Arslan wrote:
> > Une idée? Essaye de rajouter ces règles génériques: # Generic rules %.o: %.c %.d $(CC) $(CFLAGS) $(INCLUDES) $(LIBFLAGS) -c $< %.d: %.c $(CC) -MM $(INCLUDES) $< > $@ %.a: $(LIBOBJS) $(AR) rcs $@.$(VERSION) $^ @$(LN) $@.$(VERSION) $@ %.so: $(LIBOBJS) $(CC) $(CFLAGS) -shared -fPIC -ldl -o $@.$(VERSION) $^ @$(LN) $@.$(VERSION) $@ Et de mettre à la fin de ton Makefile la ligne suivante: # Dependencies -include $(DEPS) Amicalement -- Emmanuel Fleury | Office: 211 Associate Professor, | Phone: +33 (0)5 40 00 35 24 LaBRI, Domaine Universitaire | Fax: +33 (0)5 40 00 66 69 351, Cours de la Libération | email: emmanuel.fleury@labri.fr 33405 Talence Cedex, France | URL: http://www.labri.fr/~fleury |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Emmanuel Fleury wrote:
> Zulfukar Arslan wrote: > >>Une idée? > > > Essaye de rajouter ces règles génériques: Dans le makefile de la lib? et a quel endroit? > > # Generic rules > %.o: %.c %.d > $(CC) $(CFLAGS) $(INCLUDES) $(LIBFLAGS) -c $< > > %.d: %.c > $(CC) -MM $(INCLUDES) $< > $@ > > %.a: $(LIBOBJS) > $(AR) rcs $@.$(VERSION) $^ > @$(LN) $@.$(VERSION) $@ > > %.so: $(LIBOBJS) > $(CC) $(CFLAGS) -shared -fPIC -ldl -o $@.$(VERSION) $^ > @$(LN) $@.$(VERSION) $@ > > > Et de mettre à la fin de ton Makefile la ligne suivante: > > # Dependencies > -include $(DEPS) > > Amicalement |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Zulfukar Arslan wrote:
> > Dans le makefile de la lib? et a quel endroit? Dans le Makefile qui construit les binaires (pas les bibliothèques). Amicalement -- Emmanuel Fleury | Office: 211 Associate Professor, | Phone: +33 (0)5 40 00 35 24 LaBRI, Domaine Universitaire | Fax: +33 (0)5 40 00 66 69 351, Cours de la Libération | email: emmanuel.fleury@labri.fr 33405 Talence Cedex, France | URL: http://www.labri.fr/~fleury |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
Emmanuel Fleury wrote:
> Zulfukar Arslan wrote: > >>Dans le makefile de la lib? et a quel endroit? > > > Dans le Makefile qui construit les binaires (pas les bibliothèques). > > Amicalement J'ai que des "undefined reference to ...". Il a pas l'air de reconnaitre les librairies... |
|
![]() |
| Outils de la discussion | |
|
|