Autotools:可选地编译并链接到第三方库



我在Autotools build-System上具有可执行的项目prog。此程序链接针对libfoo,这也是一个Autotools项目。

我想为我的用户(希望编译prog)在链接到以前安装的libfoo或配置,编译(静态链接)和链接到libfoo源树(链接)之间的自由(在third-party目录中)

libfoo如果很重要,请使用libtool和pkg-config ...

理想情况下,这将通过一些AutoConf参数来完成:

./configure --with-local-libfoo

vs

./configure --with-system-libfoo

问题是如何告诉构建系统在prog之前编译libfoo(在第二种情况下)以及如何提供正确的链接标志?

由于libfoo也是一个自动工具项目,其副本是在主项目中分发的,因此将其设置为子项目是很自然的。密钥AutoConf宏此处是AC_CONFIG_SUBDIRS。因此,如果libfoo软件包在包含顶级configure脚本的目录的子目录libfoo/中,则顶级configure.ac将使用

AC_CONFIG_SUBDIRS([libfoo])

在这种情况下,顶级配置脚本将自动运行libfoo的配置脚本,将其传递给所有相同的选项(包括仅对libfoo有意义的所有选项)。此外,顶级脚本的--help选项将同时打印其自己和libfoo的选项。您可以在--with-*参数(但是只有一个,不要使用两个不同的参数)上。

在汽车侧,查看自动制度条件和有条件的子目录。您可以使用条件性,其中包括由--with-system-libfoo或其他任何条件控制的条件,以选择正确的链接选项集,并确定make是否会重复出现在Libfoo软件包中。当您构建自己的libfoo副本时,在主程序的链接标志中包括-static-libtool-libs选项可能会有所帮助。

最后一个位围绕着防止本地libfoo构建时,将其安装在系统侧面的系统上。我没有想出一个不涉及调整Libfoo的构建系统的好解决方案。请切换libfoo.la作为便利库(在noinst_LTLIBRARIES而不是在lib_LTLIBRARIES或类似的情况下命名),实际上通常在Libfoo Subpakage中将构建目标从安装的构建目标切换到noinst_

相关内容

  • 没有找到相关文章

最新更新