2013-02-23 12 views
6

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

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

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

私は

FOOPLACE=${abs_top_builddir}/bar/foo 

を試してみましたが、しかし、これは常にFOOPLACEのみ/bar/fooが含まれています。私はまた、これが原則であっても、これを行う正しい方法であるとは確信していません。

+1

'Makefile.am'ファイルで' $(abs_top_builddir) 'にするべきではありませんか? –

+0

@BrettHale、私は_believe_私は、私のソースディレクトリに構築されているものではなく、インストールされたバージョンのプログラムを使用しているかのようにMakefileでこれを行うことはできません。代わりにこのパスを使用する必要があります。これを回避する方法はありますか? makefileの 'FOOPLACE'変数を変更する方法があれば、これをMakefileの条件付きに置くことができましたが、これはうまくいかないようです。 – crobar

+0

@BrettHale: 'Makefile.am'では、実際にどちらかを使うことができますが、' $() '形式は従来通りです。 –

答えて

7

単純な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彼らの考えを見る。

ストーリーの道徳:どこでも置換が行われます。 に$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でそれを実行します。

関連する問題