项目附带 library 的副本,foo
文件系统布局如下:
myproject/
myproject/src/ # sources of my project
myproject/libfoo/ # import of "foo" library
标准(基于自动工具的)构建系统构建 libfoo,然后构建动态链接到libfoo
.
libfoo
基本上没有修改(有一些小的修改以正确适应构建系统)。libfoo
使用 autotools 本身,所以我通常使用AC_CONFIG_SUBDIRS
.
但是,libfoo
已经为各种发行版打包,所以我想避免在这些系统上构建导入库,而是使用系统范围的安装 - 这样我可以获得更好维护的 libfoo 版本的好处(更少的错误,安全问题,...)。otoh,我想将 libfoo 保留在我的源代码树中,这样我就可以在不提供该库的系统上进行构建(无需用户单独获取源代码并自己构建库)。
我可以想到一些我可以引入的配置标志,因此用户可以选择是否要使用系统安装、本地或不使用库来构建项目。(这是一个可选的依赖项)。禁用“本地 foo”,应该完全禁用 libfoo 的构建(并且可能还配置 foo)
例如:
./configure --enable-foo=no # aka "--disable-foo": build without foo
./configure --enable-foo # use system-wide foo
./configure --enable-foo=local # use local copy of foo
或者:
./configure --disable-foo
./configure --enable-foo --disable-local-foo
./configure --enable-foo --enable-local-foo
但我想以符合标准的方式做到这一点。
通过 autoconf 选择的最佳实践是使用本地副本还是库、系统范围的副本还是根本不使用库?
非常欢迎使用这种机制的项目的指针。