manpagez: man pages & more
info libtool
Home | html | info | man

File: libtool.info,  Node: Using Automake,  Next: Configuring,  Prev: Makefile rules,  Up: Integrating libtool

5.3 Using Automake with libtool
===============================

Libtool library support is implemented under the ‘LTLIBRARIES’ primary.

   Here are some samples from the Automake ‘Makefile.am’ in the libtool
distribution's ‘tests/demo.at’.

   First, to link a program against a libtool library, just use the
‘program_LDADD’(1) variable:

     bin_PROGRAMS = hell hell_static

     # Build hell from main.c and libhello.la
     hell_SOURCES = main.c
     hell_LDADD = libhello.la

     # Create a statically linked version of hell.
     hell_static_SOURCES = main.c
     hell_static_LDADD = libhello.la
     hell_static_LDFLAGS = -static

   You may use the ‘program_LDFLAGS’ variable to stuff in any flags you
want to pass to libtool while linking ‘program’ (such as ‘-static’ to
avoid linking uninstalled shared libtool libraries).

   Building a libtool library is almost as trivial... note the use of
‘libhello_la_LDFLAGS’ to pass the ‘-version-info’ (*note Versioning::)
option to libtool:

     # Build a libtool library, libhello.la for installation in libdir.
     lib_LTLIBRARIES = libhello.la
     libhello_la_SOURCES = hello.c foo.c
     libhello_la_LDFLAGS = -version-info 3:12:1

   The ‘-rpath’ option is passed automatically by Automake (except for
libraries listed as ‘noinst_LTLIBRARIES’), so you should not specify it.

   *Note Building a Shared Library: (automake)A Shared Library, for more
information.

   When building libtool archives which depend on built sources (for
example a generated header file), you may find it necessary to manually
record these dependencies.  Because libtool archives generate object
file names manually recording these dependencies is not as
straightforward as the examples in Automake's manual describe.  This
affects header files in particular, because simply listing them as
‘nodist_libfoo_la_SOURCES’ will not cause Automake to establish a
dependent relationship for the object files of ‘libfoo.la’.  A useful
trick (although somewhat imprecise) is to manually record built sources
used by a libtool archive as dependencies of all the objects for that
library as shown below (as opposed to a particular object file):

     # Build a libtool library, libhello.la which depends on a generated header.
     hello.h:
     	echo '#define HELLO_MESSAGE  "Hello, World!"' > $@
     BUILT_SOURCES = hello.h
     CLEANFILES = hello.h
     nodist_libhello_la_SOURCES = hello.h
     libhello_la_SOURCES = hello.c foo.h foo.c bar.h bar.c
     # Manually record hello.h as a prerequisite for all objects in libhello.la
     $(libhello_la_OBJECTS): hello.h

   *Note Recording Dependencies manually: (automake)Built Sources
Example, for more information.

   ---------- Footnotes ----------

   (1) Since GNU Automake 1.5, the flags ‘-dlopen’ or ‘-dlpreopen’
(*note Link mode::) can be employed with the ‘program_LDADD’ variable.
Unfortunately, older releases didn't accept these flags, so if you are
stuck with an ancient Automake, we recommend quoting the flag itself,
and setting ‘program_DEPENDENCIES’ too:

     program_LDADD = "-dlopen" libfoo.la
     program_DEPENDENCIES = libfoo.la

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.