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

标签 c makefile configure autoconf dropbear

我正在尝试获取 dropbear ssh C 代码来构建库而不是二进制文件。 Dropbear 是通过使用 autoconfconfigure.ac 生成 configure 构建的。然后使用 configure 生成构建可执行文件的 Makefile。我想为生成的 Makefile 创建一个目标,该目标创建一个静态链接库,以便我的应用程序可以链接它并访问 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 。我不知道您到底打算做什么,但这条路不太容易和直接。

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

关于c - 如何修改configure.ac以在最终Makefile中添加库目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374732/

相关文章:

configure - 如何在配置脚本中禁用对依赖项的跟踪

c++ - 配置:错误:无法链接到 libboost_atomic

在 C 中使用位打包压缩 'char' 数组

c - CUDD 的 bool 表达式解析器

build - 如何在 Mac 上构建 libspotify 示例

regex - ?+* 在正则表达式中没有任何内容

python - 无法配置pyQt

c - 读取数百行后程序中断

Curl get request in C -将html数据存储在另一个文件中

php - 在 OS X 上编译 PHP --with-php-config