我想要的是构建我的 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/