2009-10-30 21 views
6

¿Cómo se establece el orden de las bibliotecas en automake?¿Cómo se establece el orden de las bibliotecas en automake?

En mi am archivo que tengo algo así como:

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

Ahora, cuando compilo me sale esta línea de compilación similares 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 debe ser:

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

¿Cómo se establece el orden de las bibliotecas en automake? (O tal vez un trabajo alternativo, ¿cómo se repiten todas las bibliotecas en la línea de compilación. Eso es lo que hago en mis Makefiles personalizados.)

Respuesta

6

Desde el manual Automake (en su mayoría §8.1.2 sino también §8.4):

PROG_LDADD es inapropiado para pasando banderas enlazadores específicos del programa (excepto para -l, -L, -dlopen y -dlpreopen). Por lo tanto, utilice la variable PROG_LDFLAGS para este propósito .

Eso implica que puede (pero en realidad debe) utilizar -l y -L en LDADD, no en LDFLAGS. En otras palabras, su Makefile.am debe leer simplemente

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

eso no funciona bien –

+0

¿cómo no puede trabajar? ¿Cuál es el comando de enlace que obtienes? – adl

+0

Esto resolvió el problema casi idéntico que estaba teniendo con libgcrypt. ¡Gracias! – cmyers

Cuestiones relacionadas