【问题标题】:is it possible to have an unrelated autotools project inside an autotools project directory?是否可以在 autotools 项目目录中有一个不相关的 autotools 项目?
【发布时间】:2011-10-04 06:50:59
【问题描述】:

我有两个 autotools 项目可以单独运行:

p1 不构建任何库也不使用 C++,并且旨在由用户编译。所以我这里不 libtoolize 也不 LT_INIT。

p2 创建了一个仅用于开发的小型 C++ 库,这里我有 LT_INIT 并调用 libtoolize。

但是当我把 p2 目录放在 p1 里面时,在 p2 目录中运行 automake 会发现它在一个 autotools 项目的子目录中,我得到了错误

configure.ac:31: required file `../ltmain.sh' not found

我尝试添加

AC_CONFIG_AUX_DIR([.])

到p2的configure.ac,然后configure中的ac_aux_dir变量为空,报错

configure: error: cannot run /bin/sh /config.sub

(configure 中的行尝试运行$ax_aux_dir/config.sub

有没有一种干净的方法可以在 autotools 项目中拥有一个不相关的 autotools 项目,还是我应该放弃?

【问题讨论】:

    标签: autotools subdirectory


    【解决方案1】:

    我问了两分钟后才知道,多么典型。显然,configure.ac 必须有:

    AC_INIT(…)
    AC_CONFIG_AUX_DIR([.])
    AM_INIT_AUTOMAKE(…)
    

    而不是:

    AC_CONFIG_AUX_DIR([.])
    AC_INIT(…)
    AM_INIT_AUTOMAKE(…)
    

    像我一样(如果AUX_DIRAM_INIT_AUTOMAKE 之后,它会给出错误消息,这让我相信它也必须在AC_INIT 之后)。

    无论如何,这行得通:)

    【讨论】:

      【解决方案2】:

      在 p1 的 configure.ac 中你可以写:

      AC_CONFIG_SUBDIRS(p2)
      

      AC_CONFIG_SUBDIRS 的调用将导致 p2 被视为 p1 的子项目,具有自己的 configure.ac 等,一切都“自动运行”(希望如此)。还有一个complete small example in the autoconf manual

      【讨论】:

      • 当我尝试这个时,似乎在 p1 中运行 autoreconf/configure 会尝试配置 p2(至少它说 configuring in p2\nconfigure: WARNING: no configuration information is in p2)。我根本不希望 p1 依赖于 p2。
      • 如果您希望它们完全分开,我会将它们放在单独的目录中。如果您希望它们相关,但可选,我会使用 if test -d "$srcdir/p2"; then 语法来表示 AC_CONFIG_SUBDIRS
      猜你喜欢
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多