如何调整configure.ac以在最终的Makefile中添加库目标?

时间:2015-02-06 21:01:25

标签: c makefile configure autoconf dropbear

我试图获取dropbear ssh C代码来构建库而不是二进制文件。 Dropbear是使用configureconfigure.ac生成autoconf而构建的。然后使用configure生成构建可执行文件的Makefile。我想为生成的Makefile创建一个目标,该目标创建一个静态链接的库,以便我的应用程序可以链接它并有权访问dropbear功能。

是否有直接的方法来修改configure.ac以实现此目标?

1 个答案:

答案 0 :(得分:1)

没有。但是,有一种直接的方法来修改Makefile.inMakefile.inMakefile的模板; configure脚本只是将@Makefile.in中包含的表达式替换为在运行期间推导出的值,因此您可以将规则添加到Makefile.in,几乎相同你想要一个简单的Makefile。

在这种特殊情况下,您可以添加以下内容:

dropbearlibobjs = $(filter-out svr-main.o,$(dropbearobjs))

libdropbear.a: $(dropbearlibobjs) $(HEADERS) $(LIBTOM_DEPS) Makefile
        ar rcs $@ $(dropbearlibobjs)

大部分内容取自dropbear:目标,除了配方构建静态库并且过滤掉包含main函数的转换单元。然后你可以使用

./configure
make libdropbear.a

建立图书馆。

我不确定这个库可以轻松地与新程序集成。 dropbear的作者几乎肯定不会在编写它时考虑这个用例,因此部分代码可能依赖于您的应用程序无法提供的全局状态(例如信号处理程序),并且通常没有记录的API你可以依赖。我不知道你打算做什么,但这条道路不太容易和直截了当。

也许您更愿意看看libsshlibssh2? (有趣的是,前者似乎比后者更新)