Question

Comment définissez-vous l'ordre des bibliothèques dans automake?

Dans mon dossier, j'ai quelque chose comme:

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la
myprog_LDFLAGS = -static -L/home/user/lib -ladhoc

Maintenant, quand je compile, cette ligne de compilation est similaire:

gcc -static myprog-myprog.o -o myprog -L/home/user/lib -ladhoc ./.libs/libmine.a

Le problème est que libmine.a dépend de libadhoc.a, la ligne de compilation doit donc être:

gcc -static myprog-myprog.o -o myprog ./.libs/libmine.a -L/home/user/lib -ladhoc

Comment définissez-vous l'ordre des bibliothèques dans automake? (Ou peut-être un moyen de contourner le problème: comment répéter toutes les bibliothèques de la ligne de compilation? C'est ce que je fais dans mes Makefiles personnalisés.)

Était-ce utile?

La solution

Extrait du manuel Automake (principalement & # 167; 8.1.2 mais aussi & # 167; 8.4 ):

  

PROG_LDADD est inapproprié pour   passage de drapeaux d'éditeur de liens spécifiques au programme   (sauf pour -l , -L , -dlopen et    -dlpreopen ). Alors, utilisez le    PROG_LDFLAGS variable pour cela   but.

Cela implique que vous pouvez (mais en fait vous devriez) utiliser -l et -L dans LDADD , pas dans LDFLAGS . En d'autres termes, votre Makefile.am doit simplement lire

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la -L/home/user/lib -ladhoc
myprog_LDFLAGS = -static 

Autres conseils

Une idée du livre automake ( http://sources.redhat.com/ autobook / autobook / autobook_92.html ): créez une bibliothèque pratique à partir de libmine et de libadhoc, et liez myprog à cet objectif.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top