如何修改 configure.ac 以在最终 Makefile 中添加库目标?
How to adapt configure.ac to add a library target in final Makefile?
我正在尝试获取 dropbear ssh C 代码来构建库而不是二进制文件。 Dropbear 是通过使用 autoconf
从 configure.ac
生成 configure
构建的。 configure
然后用于生成构建可执行文件的 Makefile
。我想为生成的 Makefile
创建一个目标,它创建一个静态 linked 库,以便我的应用程序可以 link 它并可以访问 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你可以依赖。我不知道你到底打算做什么,但这条路不太可能一帆风顺。
我正在尝试获取 dropbear ssh C 代码来构建库而不是二进制文件。 Dropbear 是通过使用 autoconf
从 configure.ac
生成 configure
构建的。 configure
然后用于生成构建可执行文件的 Makefile
。我想为生成的 Makefile
创建一个目标,它创建一个静态 linked 库,以便我的应用程序可以 link 它并可以访问 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你可以依赖。我不知道你到底打算做什么,但这条路不太可能一帆风顺。