c - 在不安装的情况下构建嵌套的 Autotools 包

标签 c linux gcc autotools autoconf

我想要的是构建我的 autotools 包和一个嵌套的 autotools 包。它是一个静态库,通常这个包会在你的 $prefix/lib 文件夹中安装 lib,如果你键入 make && make install

子包文件:

configure.ac

AC_INIT([testlib],[1.0],[bugs@anonym.net])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AC_PROG_CC()
AC_PROG_RANLIB()
AC_CHECK_HEADERS()
AC_LANG([C])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT

Makefile.am

SUBDIRS = src

src/Makefile.am

lib_LIBRARIES = libtestlib.a
libtestlib_a_SOURCES = testlib.c
include_HEADERS = testlib.h

但我想将它用作我的 autotools 包中的嵌套包,并且只需要它在构建时进行链接。

那么我如何实现我的包已构建并安装,但子包/嵌套包仅构建而不修改子包中的 configure.ac 或 Makefile.am?

最佳答案

So how do I achieve that my package is build & installed but the sub- / nested package is only build without modifying the configure.ac or the Makefile.am from the sub-package?

你最好的选择可能是在顶级 configure.ac 中使用 AC_CONFIG_SUBDIRS 将子包的 configuration 链接到顶级 -级包,但要避免在顶级 Makefile.am 中使用 SUBDIRS 来触发 make 递归到子包中。代替后者,将手动规则添加到顶级 Makefile.am 以通过递归 make 构建所需的库。

在顶级包中,它看起来像这样:

configure.ac

# ...
AC_CONFIG_SUBDIRS([testlib-1.0])
# ...

Makefile.am

# ... testlib-1.0 *not* present in SUBDIRS ...

testlib-1.0/src/libtestlib.a:
    $(MAKE) -C testlib-1.0

然后,请务必在需要时表达对 teSTLib-1.0/src/libteSTLib.a 的适当依赖,并在顶层使用适当的链接选项。

关于c - 在不安装的情况下构建嵌套的 Autotools 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25065337/

相关文章:

C raw sockets 数据包看起来不错但没有逃脱网络

c - 如何在C中读取和覆盖文本文件?

c - 堆栈上的动态内存分配

c - 移植到mingw时如何处理 "SIGQUIT"信号?

c - 将 dvb url 地址拆分为单独的值

windows - 剪贴板复制操作 - 内容是谁的文件?

php - PHP Excel 库中的 fatal error : Class 'ZipArchive' not found in php 5. 1.6

c++ - 在 C、C++ 中检测 Windows 或 Linux

c - GCC:禁止使用某些寄存器

c - 从 fgets() 输入中删除尾随换行符