【问题标题】:How to adapt configure.ac to add a library target in final Makefile?如何调整 configure.ac 以在最终 Makefile 中添加库目标?
【发布时间】:2015-04-07 02:59:01
【问题描述】:
我正在尝试获取dropbear ssh C 代码来构建库而不是二进制文件。 Dropbear 是通过使用autoconf 从configure.ac 生成configure 构建的。然后使用configure 生成构建可执行文件的Makefile。我想为生成的 Makefile 创建一个目标,该目标创建一个静态链接库,以便我的应用程序可以链接它并访问 dropbear 功能。
是否有直接修改configure.ac 以实现此目标的方法?
【问题讨论】:
标签:
c
makefile
configure
autoconf
dropbear
【解决方案1】:
没有。但是,有一种直接的方法可以为此修改Makefile.in。 Makefile.in 是Makefile 的模板; 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 或libssh2? (有趣的是,前者似乎比后者更近)