我正在构建一个共享库,并且源代码树的结构如下:
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
但使用此配置构建会给出未定义的符号错误。
构建此源代码并将所有库链接在一起的正确方法是什么?
答案 0 :(得分:0)
事实证明,源布局和libtool用法很好,但我的根Makefile.am有以下宏:
SUBDIRS = src thirdparty
本应该是
SUBDIRS = thirdparty src
由于src/
中的代码引用了thirdparty/
中的代码,因此需要首先构建thirdparty/
代码。 SUBDIRS
宏导致子文件夹按从左到右的顺序构建。