views:

69

answers:

2

How do you set the order of libraries in automake?

In my am file I have something like:

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

Now, when I compile I get this compile line similar too:

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

The problem is that libmine.a depends on libadhoc.a, therefore the compile line should be:

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

How do you set the order of libraries in automake? (Or maybe a work around; how do you repeat all the libraries in the compile line. That's what I do in my custom Makefiles.)

+1  A: 

One idea from the automake book (http://sources.redhat.com/autobook/autobook/autobook%5F92.html): create a convenience library out of libmine and libadhoc, and link myprog against that.

ankon
A: 

From the Automake manual:

PROG_LDADD is inappropriate for passing program-specific linker flags (except for -l, -L, -dlopen and -dlpreopen). So, use the PROG_LDFLAGS variable for this purpose.

That implies you can (but actually you should) use -l and -L in LDADD, not in LDFLAGS. In other words your Makefile.am should simply read

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la -L/home/user/lib -ladhoc
myprog_LDFLAGS = -static
adl
that doesn't work either
Crazy Chenz
How can it not work? What is the link command you get?
adl