I'm trying to setup an automake project that uses a mix of libtool libraries and exectuables, and I'm having a hard time grokking the automake documentation, esp. as relates to telling the compiler to link against.
So can someone explain the differences between LDADD
and LIBADD
?
Things like:
-lname_of_library
style values vs. direct filenames,
etc.Whenever I try to read the relevant documentation, it seems like it assumes that I know things that I don't.
Use the LIBADD
primary for libraries, and LDADD
for executables. If you were building a libtool library libfoo.la
, that depended on another library libbar.la
, you would use:
libfoo_la_LIBADD = libbar.la
If you had other non-libtool libraries, you would also add these with -L
and -l
options:
libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng
Typically, you would use the configure script to find these extra libraries, and use AC_SUBST
to pass them with:
libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS)
For a program, just use LDADD
:
myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog.
Sometimes the boundaries are a bit vague. $(EXTRA_FOO_LIBS)
could have been added to myprog_LDADD
. Adding dependencies to a libtool (.la
) library, and using libtool
do all the platform-specific linker magic, is usually the best approach. It keeps all the linker metadata in the one place.