¿Cómo se establece el orden de las bibliotecas en automake?
Pregunta
¿Cómo se configura el orden de las bibliotecas en automake?
En mi archivo am tengo algo como:
myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la
myprog_LDFLAGS = -static -L/home/user/lib -ladhoc
Ahora, cuando compilo obtengo esta línea de compilación similar también:
gcc -static myprog-myprog.o -o myprog -L/home/user/lib -ladhoc ./.libs/libmine.a
El problema es que libmine.a depende de libadhoc.a, por lo tanto, la línea de compilación debería ser:
gcc -static myprog-myprog.o -o myprog ./.libs/libmine.a -L/home/user/lib -ladhoc
¿Cómo se configura el orden de las bibliotecas en automake? (O tal vez una solución; ¿cómo repites todas las bibliotecas en la línea de compilación? Eso es lo que hago en mis Makefiles personalizados).
Solución
Del manual de Automake (principalmente §8.1.2 pero también §8.4 ):
PROG_LDADD
es inapropiado para pasar banderas de enlace específicas del programa (excepto-l
,-L
,-dlopen
y-dlpreopen
). Entonces, usa elPROG_LDFLAGS
variable para esto propósito.
Eso implica que puede (pero en realidad debería) usar -l
y -L
en LDADD
, no en LDFLAGS . En otras palabras, su
Makefile.am
simplemente debería leer
myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la -L/home/user/lib -ladhoc
myprog_LDFLAGS = -static
Otros consejos
Una idea del libro de automake ( http://sources.redhat.com/ autobook / autobook / autobook_92.html ): cree una biblioteca de conveniencia a partir de libmine y libadhoc, y vincule myprog con eso.