首页 > 解决方案 > 如何使用 autotools 构建系统完全包含另一个项目?

问题描述

我的项目依赖于 C 中的第三方库(-ies),它本身有一个基于自动工具的独立构建系统。

我想在源代码树中拥有一个第三方库的副本,并为我的项目编写基于自动工具的通用构建系统,这样我就可以拥有一个配置和所有常用的自动工具捆绑来完成一个完整的一次性构建。

该系统会以某种方式首先构建第三方库(使用第三方的 configure.ac 等,就好像它是独立构建的一样),然后编译并将我的所有源与第三方库链接(我愿意只是静态链接我的程序到第三方库,而不是在系统位置的任何地方安装第三方库/usr/local等)。

所以我假设一个项目的目录结构如下:

project/
    src/
        folder_with_my_source_code/
        third-party/
            third-party-lib-1/
                src/
                Makefile.am  // native lib-1 files, prefer to keep unmodified
                configure.ac // native lib-1 files, prefer to keep unmodified
            third-party-lib-2/
                src/
                Makefile.am  // native lib-2 files, prefer to keep unmodified
                configure.ac // native lib-2 files, prefer to keep unmodified
            Makefile.am   // do I need this at all ?

        Makefile.am //this should describe how to build my files
    Makefile.am  // project's root makefile
    configure.ac // this, probably, should somehow include instructions on how to build lib-1 and lib-2 with their supplied configure.ac's ?

如何创建这种类似链的依赖构建?

标签: autotoolsbuild-system

解决方案


您可以使用AC_CONFIG_SUBDIRS

在大多数情况下,调用AC_OUTPUT足以在子目录中生成 makefile。但是,configure控制多个独立包的脚本可以AC_CONFIG_SUBDIRS用来运行configure子目录中其他包的脚本。

— 宏:AC_CONFIG_SUBDIRS ( dir ...)
在给定的空白或换行符分隔列表中的每个子目录dirAC_OUTPUT中运行。configure


推荐阅读