通过自动配置中的AC_CONFIG_SUBDIRS共享AC_DEFINE

k5ifujac  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(96)

我有两个使用autoconf的用户。项目A通过AC_CONFIG_SUBDIRS()使用项目B
项目A configure.ac:

AC_CONFIG_SUBDIRS([projectb])

项目B configure.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。

wqnecbli

wqnecbli1#

我想将NEWDEFINE从项目B导出到项目A。
AC_CONFIG_SUBDIRS用于配置捆绑的独立项目。这样一个项目的配置是它自己的。如果你正在寻找这样一个项目的 external 宏,那么你会在项目的一个公共头文件中找到它,需要它的项目A源应该是#include。可能是生成的header。
如果你想要的宏不能以这种方式访问,那么初步估计,它根本不可用。也就是说,项目A的构建不应该依赖于项目B或任何其他单独项目的内部构建细节。替代方案包括:

  • 不要。
  • 利用您对项目B的配置脚本以及将调用它的选项的了解来预测它将生成的定义。
  • 破解项目B的副本,在现有的或新的公共头中向您公开定义,或者更好地允许项目A控制定义。
  • 如果项目B使用AC_CONFIG_HEADERS,那么宏定义将被写入该项目的config.h(这是一个 * 内部 * 头),然后从那里以任何方式获得它。其中最糟糕的是将#include项目B的config.h直接放到常规源代码中--不要这样做。
  • 如果你真的需要在项目A中对项目B进行内部构建配置,那么这可能是一个信号,表明它们不应该是单独的项目。您可以在单个配置脚本的控制下将它们合并在一起,该配置脚本当然包含所有相关信息。

无论如何,当项目B的configure由项目A的configureAC_CONFIG_SUBDIRS的控制下运行时,您无法将项目B的configure生成的数据获取到项目A的configure中。结构和时间安排不起作用。

相关问题