如何在autoconf configure.ac中获得顶层构建目录的绝对路径?
问题描述:
我正在开发一个需要一个具有自己的makefile和configure.ac的子项目的项目。该子项目是一个用于为主项目生成源文件的程序。有一个选项可禁用此项目的构建,并尝试使用已安装的版本。如何在autoconf configure.ac中获得顶层构建目录的绝对路径?
无论哪种情况,我都会在我的Makefile.am中创建一个包含程序路径的变量。
我的问题是,当使用本地版本的项目,我怎么能得到它的位置在我的Makefile.am中使用?
我已经试过
FOOPLACE=${abs_top_builddir}/bar/foo
但是这总是让FOOPLACE
只包含/bar/foo
。即使原则上,我也不确定这是否是正确的做法。
答
我只是用一个简单的configure.ac
做了一些测试。
除非通过替换(即AC_CONFIG_FILES
),否则我无法获得$abs_top_builddir
的合理值。根据Preset Output Variables(autoconf),它们应该至少在config.status
期间可用(即,AC_CONFIG_COMMANDS
)。他们不是。
潜入config.status
,我发现@[email protected]
设置为$ac_abs_top_builddir
的值。这看起来很奇怪,我认为这可能是一个错误。 I have sent it to bug-autoconf看看他们在想什么。
道德故事:它应该在任何地方进行替代工作。您可以在config.status
内使用$ac_abs_top_builddir
,但我不会依赖它。
这里是我使用的测试:
configure.ac:
AC_PREREQ([2.67])
AC_INIT([], [0], [[email protected]])
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 -*-
# @[email protected]
echo "test: @[email protected]"
echo "test+ac: @[email protected]"
与autoconf && ./configure && ./test
运行它。
这不应该是'Makefile.am'文件中的$(abs_top_builddir)吗? – 2013-02-23 18:26:27
@BrettHale,我_believe_我不能在Makefile中这样做,就好像我正在使用已安装的程序版本,而不是在我的源代码目录中构建的版本,那么我需要使用此路径。有没有解决的办法?如果有一种方法可以在Makefile中修改我的'FOOPLACE'变量,我可以将它放在Makefile中的条件中,但这似乎不起作用。 – crobar 2013-02-23 19:46:13
@BrettHale:在'Makefile.am'中你可以实际使用,但'$()'表单是常规的。 – 2013-02-23 20:44:58