使用递归Automake链接到兄弟libtool库

时间:2013-08-24 16:15:10

标签: shared-libraries autotools autoconf automake libtool

我正在构建一个共享库,并且源代码树的结构如下:

Makefile.am
src/
    Makefile.am
    srcfile1.h
    srcfile1.cpp
    ...
thirdpaty/
    Makefile.am
    lib1/
        Makefile.am
        lib1.h
        lib1.cpp
        ...
    lib2/
        ...

我使用递归Automake,因为一些第三方库与他们自己的Automake文件一起分发。 src/Makefile.am包括通常的libtool宏:

lib_LTLIBRARIES = libmylib.la 
libmylib_la_SOURCES = scrfile1.h srcfile1.cpp ...

如何将主库链接到第三方库? Autotools manual让我相信第三方库需要构建为libtool便利库,所以我在thirdparty/lib1/Makefile.am中有以下内容:

noinst_LTLIBRARIES  = libthirdpaty1.la
libthirdpaty1_la_SOURCES = lib1.cpp lib1.h

并在src/Makefile.am中添加以下内容:

libmylib_la_LIBADD = $(top_buildir)/thirdparty/lib1/libthirdpaty1.la

我的根Makefile.am拥有INCLUDES宏:

INCLUDES = -I$(top_builddir)/thirdparty

但使用此配置构建会给出未定义的符号错误。

构建此源代码并将所有库链接在一起的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

事实证明,源布局和libtool用法很好,但我的根Makefile.am有以下宏:

SUBDIRS = src thirdparty

本应该是

SUBDIRS = thirdparty src

由于src/中的代码引用了thirdparty/中的代码,因此需要首先构建thirdparty/代码。 SUBDIRS宏导致子文件夹按从左到右的顺序构建。