如何使用 autotools 构建系统完全包含另一个项目?

How to fully include another project(s) with autotools build system?

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

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

这个系统会以某种方式首先构建第三方库(使用第三方的 configure.ac 等,就好像它是独立构建的),然后用第三方编译和 links 我的所有源代码- 第三方库(我愿意将我的程序静态 link 到第三方库,而不是在系统位置的任何地方安装第三方库,如 /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 ?

如何创建这种链状依赖构建?

您可以使用 AC_CONFIG_SUBDIRS:

In most situations, calling AC_OUTPUT is sufficient to produce makefiles in subdirectories. However, configure scripts that control more than one independent package can use AC_CONFIG_SUBDIRS to run configure scripts for other packages in subdirectories.

— Macro: AC_CONFIG_SUBDIRS (dir ...)
Make AC_OUTPUT run configure in each subdirectory dir in the given blank-or-newline-separated list.