Comment définissez-vous l'ordre des bibliothèques dans automake?
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.)
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 lePROG_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.