如何在 autotools 项目中传播配置选项?

How to propagate an configure option in an autotools project?

我有一个自动工具项目。 我可以为我的顶部定义一个自定义选项 configure.ac(“--enable-XX”选项,使用 AC_ARG_ENABLE 和 AM_CONDTIONNAL)。这个可以。

但是现在,我想将此选项传播到我的所有子目录。

我该怎么做? :

我是否必须在每个子目录 configure.ac 中定义 AC_ARG_ENABLE/AM_CONDTIONAL?

//// 编辑 ////

这是我的工作目录的架构:

Project
  | configure.ac
  | Makefile.am
  | Component_1
      | configure.ac
      | Makefile.am (*)
      | src
          | Makefile.am
  | Component_2
      | configure.ac
      | Makefile.am (*)
      | src
          | Makefile.am

(*) SUBDIRS = src

使用子目录不需要创建子项目.

在典型的 Autotools 项目中,只有顶级目录有 configure.acconfigure 脚本。如果子目录中有 makefile 或其他要配置的工件,那么这一切都由一个顶级脚本处理。有了这样的安排,你的问题就没有意义了——没有地方可以传播选项 ,也没有理由传播它们。

另一方面,有时一个项目会合并一个单独的完整项目。如果合并的项目是一个 Autotools 项目,那么它将有自己的 configure 脚本,当顶级项目是 运行 时,该脚本应该是 运行。这是通过使用顶级项目 configure.ac 中的 AC_CONFIG_SUBDIRS 宏来安排的。每个指定子目录中的 configure 脚本将 运行 具有与顶级 configure 与 运行 相同的命令行参数;您无需执行任何其他操作即可转发选项。

然而,将任何特定选项转发到子项目 configure 脚本是否有意义是一个单独的问题。自定义 configure 选项的含义(如果有的话)特定于每个 configure 脚本。如果你有一个子项目,你想以特定的方式对特定的自定义选项做出反应,那么它需要自己的 AC_ARG_ENABLE / AC_ARG_WITH 以及任何其他需要的东西。但是如果你觉得随意修改一个子项目来添加这样的东西,那么也许它根本不应该是一个子项目,而是完全集成,这样它就可以直接由顶层脚本配置。