如何获取autoconf configure.ac中顶级构建目录的绝对路径?

时间:2013-02-23 14:48:15

标签: autotools autoconf automake

我正在开发一个需要子项目的项目,该子项目有自己的makefile和configure.ac。子项目是一个程序,用于为主项目生成源文件。可以选择禁用此项目的构建,并尝试使用已安装的版本。

在任何一种情况下,我都会创建一个变量,该变量在我的Makefile.am中使用,包含程序的路径。

我的问题是,当使用项目的本地版本时,如何在Makefile.am中获取其位置?

我试过了

FOOPLACE=${abs_top_builddir}/bar/foo

但这始终会使FOOPLACE仅包含/bar/foo。即使在原则上,我也不确定这是否是正确的方法。

2 个答案:

答案 0 :(得分:7)

我刚刚使用简单的configure.ac进行了一些测试。

除非通过替换(即$abs_top_builddir),否则AC_CONFIG_FILES无法获得合理的价值。根据{{​​3}},它们至少应在config.status期间可用(即AC_CONFIG_COMMANDS)。他们不是。

潜入config.status,我发现@abs_top_builddir@设置为$ac_abs_top_builddir的值。这看起来很奇怪,我认为这可能是一个错误。 Preset Output Variables(autoconf)看看他们的想法。

故事的道德:它应该适用于任何替换完成的地方。您可以在$ac_abs_top_builddir中使用config.status,但我不会依赖它。

以下是我使用的测试:

configure.ac:

AC_PREREQ([2.67])
AC_INIT([], [0], [foo@example.com])
AC_MSG_NOTICE([notice: ${abs_top_builddir}])
AC_MSG_NOTICE([notice+ac: ${abs_top_builddir}])
AC_CONFIG_COMMANDS_PRE([echo "pre+ac: ${ac_abs_top_builddir}"])
AC_CONFIG_COMMANDS_PRE([echo "pre: ${abs_top_builddir}"])
AC_CONFIG_COMMANDS_POST([echo "post+ac: ${ac_abs_top_builddir}"])
AC_CONFIG_COMMANDS_POST([echo "post: ${abs_top_builddir}"])
AC_CONFIG_COMMANDS([echo],
[echo "config.status+ac: ${ac_abs_top_builddir}"
echo "config.status: ${abs_top_builddir}"])
AC_CONFIG_FILES([test], [chmod +x test])
AC_OUTPUT

test.in:

#!/bin/sh
# -*- sh -*-
# @configure_input@
echo "test: @abs_top_builddir@"
echo "test+ac: @ac_abs_top_builddir@"

使用autoconf && ./configure && ./test运行它。

答案 1 :(得分:0)

在配置脚本中,我看到使用来设置运行配置脚本的绝对路径

ac_abs_confdir=`(
    cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
    pwd)`

我已经在configure.ac中使用$ac_abs_confdir对其进行了测试,并且可以正常工作。