如何修改 configure.ac 以在最终 Makefile 中添加库目标?

How to adapt configure.ac to add a library target in final Makefile?

我正在尝试获取 dropbear ssh C 代码来构建库而不是二进制文件。 Dropbear 是通过使用 autoconfconfigure.ac 生成 configure 构建的。 configure 然后用于生成构建可执行文件的 Makefile。我想为生成的 Makefile 创建一个目标,它创建一个静态 linked 库,以便我的应用程序可以 link 它并可以访问 dropbear 功能。

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

没有。但是,有一种直接的方法可以为此修改 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你可以依赖。我不知道你到底打算做什么,但这条路不太可能一帆风顺。

也许您更愿意看一看 libssh or libssh2? (有趣的是,前者似乎比后者更晚)