9

私は、独自のmakefileとconfigure.acを持つサブプロジェクトを必要とするプロジェクトに取り組んでいます。サブプロジェクトは、メインプロジェクトのソースファイルを生成するために使用されるプログラムです。このプロジェクトのビルドを無効にして、代わりにインストールされたバージョンを使用するオプションがあります。

いずれの場合も、プログラムへのパスを含むMakefile.amで使用される変数を作成します。

私の質問は、プロジェクトのローカルバージョンを使用する場合、Makefile.amで使用するためにその場所を取得するにはどうすればよいですか?

私が試してみました

FOOPLACE=${abs_top_builddir}/bar/foo

ただし、これは常に。FOOPLACEのみを含みます/bar/foo。また、原則としても、これが正しい方法であるかどうかさえわかりません。

4

2 に答える 2

7

単純なでいくつかのテストを行いましたconfigure.ac

$abs_top_builddir置換(つまり)を介さない限り、私は賢明な値を得ることができませんでしたAC_CONFIG_FILESプリセット出力変数(autoconf)によると、それらは少なくともconfig.status(すなわちAC_CONFIG_COMMANDS)の間に利用可能である必要があります。ではない。

に飛び込むと、それがの値に設定されてconfig.statusいることがわかりました。これは奇妙に思えますが、バグかもしれないと思います。私はそれをbug-autoconfに送って、彼らの考えを確認しました。@abs_top_builddir@$ac_abs_top_builddir

話の教訓:置換が行われる場所ならどこでも機能するはずです。$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ます。

于 2013-02-23T21:11:11.377 に答える