如何在Autotools中打包可执行文件及其依赖的库

时间:2013-01-03 15:31:35

标签: c makefile autotools

我是autotools的新手,我一直在寻找如何使用autotools打包库和可执行文件的示例。可执行文件取决于库,因此必须首先构建库。

到目前为止,我已经将这个库打包了,然后我就能够编译可执行文件并在安装后链接到库。这是我的Makefile.am用于该过程:

lib_LTLIBRARIES = libfoo.1.0.0.la
libfoo_1_0_0_la_SOURCES = libfoo.c
library_includedir=$(includedir)
library_include_HEADERS = libfoo.h

然后在configure.ac文件中,我在适当的位置添加了行LT_INIT。一切都很好地构建和工作。我有一个文件foo.c,它使用我可以用gcc foo.c -o foo -lfoo编译的库,但是我想扩展autotools包以包含foo可执行文件,我无法弄清楚如何执行此操作。我已经将Makefile.am修改为如下所示:

bin_PROGRAMS=foo
foo_SOURCES=foo.c
foo_DEPENDENCIES=libfoo.1.0.0.la
lib_LTLIBRARIES = libfoo.1.0.0.la
libfoo_1_0_0_la_SOURCES = libfoo.c
library_includedir=$(includedir)
library_include_HEADERS = libfoo.h

我的configure.ac文件未更改。一切都运行良好,直到我做,在这一点上似乎首先编译foo.c并且显然抛出了很多错误,因为libfoo中的函数不可用。我已经搜索过这样的例子,但到目前为止还没有任何运气。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

这是正确的方法。

lib_LTLIBRARIES = libmoovcaps.la
libmovcaps_la_SOURCES = libmoovcaps.c
include_HEADERS = libmoovcaps.h
bin_PROGRAMS = moovcaps
moovcaps_SOURCES = moovcaps.c
moovcaps_LDADD = libmoovcaps.la

P.S。:为什么你的libmoovcaps.la中有数字?您可以通过-version-info传递libmoovcaps_LDFLAGS标记。

答案 1 :(得分:0)

我想通了,我把它放在Makefile.am

lib_LTLIBRARIES = libfoo.1.0.0.la
libfoo_la_SOURCES = libfoo.c
library_includedir=$(includedir)
library_include_HEADERS = libfoo.h
bin_PROGRAMS=foo
foo_SOURCES=foo.c
foo_DEPENDENCIES=libfoo.1.0.0.la
foo_LDADD= libfoo.o

这似乎现在有效:)