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

问题描述

我有一个 autotools 项目。 我可以为我的顶部 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 以及其他任何需要与之配合的东西。但是如果你觉得可以随意修改一个子项目来添加这样的东西,那么也许它根本不应该是一个子项目,而是完全集成,这样它就可以由顶级脚本直接配置。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...