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_LDFLAGS = -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.)
From the Automake manual (mostly §8.1.2 but also §8.4):
PROG_LDADD
is inappropriate for passing program-specific linker flags (except for-l
,-L
,-dlopen
and-dlpreopen
). So, use thePROG_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
One idea from the automake book (http://sources.redhat.com/autobook/autobook/autobook_92.html): create a convenience library out of libmine and libadhoc, and link myprog against that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With