【发布时间】:2014-09-23 18:40:27
【问题描述】:
我想要的是将我的 autotools 包与嵌套的 autotools 包一起构建。它是一个静态库,如果你输入 make && make install,通常这个包会在你的 $prefix/lib 文件夹中安装这个库
子包文件:
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?
【问题讨论】:
-
看起来你想做的事情完全颠覆了库的目的,并且不是一个很好的工作流。如果您想使用其他包作为便利库,则将源代码从中提取并在您自己的包中使用。或者让用户在临时位置安装其他包并构建静态链接的可执行文件。但是,实际上,更好的选择是让用户安装依赖项。
-
为什么?如果该库已经作为 automake 包提供,为什么不使用它,当 automake 已经具备包含子包的便利时?我想让用户的安装简单。所以我不希望他们自己安装依赖项。我不想在系统中安装这个库,因为用户不需要它。这是一个静态库,仅在此构建中需要!如果用户决定在自己的项目中更频繁地使用这个库;此时安装库是有意义的,但不仅仅是一个版本!
-
因为 autotools 不是包管理系统,所以不应该这样使用。如果你的目标是让用户的安装简单,那么就给他们一个 rpm、一个 deb、一个 pkg,或者任何你喜欢的包。
-
是的,不是包管理,而是依赖跟踪和包含子包的能力......但是我从未谈到包管理并包含作为程序一部分的库并不意味着使用 autotools 作为包管理器...我不知道您是怎么想到的...
-
短语“我想让用户的安装简单”尖叫“包管理系统”。
标签: c linux gcc autotools autoconf