我正在尝试获取 dropbear ssh C 代码来构建库而不是二进制文件。 Dropbear 是通过使用 autoconf
从 configure.ac
生成 configure
构建的。然后使用 configure
生成构建可执行文件的 Makefile
。我想为生成的 Makefile
创建一个目标,该目标创建一个静态链接库,以便我的应用程序可以链接它并访问 dropbear 功能。
是否有直接的方法来修改 configure.ac
来实现此目标?
最佳答案
没有。不过,有一种简单的方法可以为此修改 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 。我不知道您到底打算做什么,但这条路不太容易和直接。
关于c - 如何修改configure.ac以在最终Makefile中添加库目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374732/