2013-01-03 33 views
1

我是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

这是做的正确方法。

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中有数字?您可以通过libmoovcaps_LDFLAGS传递-version-info标志。

+0

谢谢,我不知道-version-info标志,这是我第一次尝试autotools。 – James

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 

这似乎是现在的工作:)

相关问题