在 autoconf 中通过 AC_CONFIG_SUBDIRS 共享 AC_DEFINE

问题描述 投票:0回答:1

我有两个使用 autoconf 的程序。项目A通过AC_CONFIG_SUBDIRS()使用项目B

项目A配置.ac:

AC_CONFIG_SUBDIRS([projectb])

项目B配置.ac:

AC_DEFINE([NEWDEFINE])

我想将 NEWDEFINE 从项目 B 导出到项目 A。

a.c:

#ifndef NEWDEFINE
#error NEWDEFINE not defined
#endif
$ autoreconf
$ ./configure
$ make
a.c:2:2: error: #error PTHREAD not defined
    2 | #error NEWDEFINE not defined
      |  ^~~~~

我想查看项目 A 的 a.c 中的 NEWDEFINE。

c autotools autoconf
1个回答
0
投票

我想将 NEWDEFINE 从项目 B 导出到项目 A。

AC_CONFIG_SUBDIRS
用于配置捆绑的独立项目。这样的项目的配置是它自己的。如果您正在寻找此类项目的external宏(已构建),那么您将在项目的公共标头之一中找到它,需要它的项目 A 来源应该
#include
。可能是生成的标头。

如果您想要的宏无法通过这种方式访问,那么首先近似,它根本不可用。也就是说,项目 A 的构建不应依赖于项目 B 或任何其他单独项目的内部构建细节。替代方案包括:

  • 不用。

  • 利用您对项目 B 的配置脚本及其调用选项的了解来预测它将生成的定义。

  • 破解项目 B 的副本,在现有或新的公共标头中向您公开定义,或者更好的是,允许项目 A 控制定义是什么。

  • 如果项目 B 使用

    AC_CONFIG_HEADERS
    ,则宏定义将写入该项目的
    config.h
    中(这是一个 internal 标头),然后通过多种方式从那里获取它。其中最糟糕的情况是将
    #include
    直接将 B 的
    config.h
    投射到您的常规来源中 - 不要这样做。

  • 如果您确实需要项目 A 中项目 B 的内部构建配置,那么这可能表明它们不是真正独立的项目。您可以在单个配置脚本的控制下将它们合并在一起,当然该脚本包含所有相关信息。

无论如何,当前者由后者在

configure
控制下时,您无法将项目 B 的
configure
生成的数据获取到项目 A 的
AC_CONFIG_SUBDIRS
中。结构和时间安排不适用于此。

© www.soinside.com 2019 - 2024. All rights reserved.