2011-01-29 16 views
2

私はautomakeとautoconfを使用します。サブディレクトリSRCでは Automake:ビルド結果への依存

は/ Makefile.amが、私はそれを修正するために、バイナリ上のツール(システムにインストールされているいくつかのアナライザー/オプティマイザ)を実行したいのhelloを作成した後

bin_PROGRAMS = hello 
hello_SOURCES = hello.c 

が含まれている(例えば、ストリップ)統計を生成する(例えば、ドワーフ、パホールなど)。メイクでハローを構築し、ツールすべてがうまくであることを確認実行する場合は、この目的のために、トップレベル・ディレクトリにあるMakefile.amは

tool: 
     tool src/hello 

が含まれています。この問題は、ユーザーがバイナリをビルドせずにmakeツールを実行したときに発生します。 bin_PROGRAMS(リストかもしれません)またはhelloバイナリをターゲットツールの依存関係として構築するには、どのようにしたらいいですか?

どちら

tool: bin_PROGRAMS 
     tool src/hello 

tool: src/hello 
     tool src/hello 

作品。

+1

メイクファイル全体を投稿できますか? – Kevin

答えて

1

'tool'という名前のMakefileターゲットはとなり、 'tool'という名前のファイルを作成します。 'tool'はすでに存在しているので、Makeはコマンドをもう一度実行する必要はないと仮定します(私は単純化していますが、少しです)。これは動作するはずのよう

Aは構築:

tool_output: tool src/hello 
    tool src/hello > tool_output 

をまた、一般的に私はあなたが依存としてbin_PROGRAMSまたはその他のAutomake(=に割り当てられた)変数を使用することはできませんと信じて、私は可能性があり違う。

+0

この問題は '.PHONY:tool'が解決しようとしているものです。 – ptomato

+0

これはたぶん個人的なスタイルですが、 '.PHONY' /' FORCE'はこれに使われることはないと思います。ビルドディレクトリの奇妙なジャンクに対する防御であり、makefileターゲットの通常のセマンティクスを回避する方法ではありません。 – zwol

+0

私の質問は.PHONYの問題ではなく、依存関係に関するものでした。私はターゲットツールがどんな場合でも出力ファイルを作成せず、いくつかのジャンクファイルがその名前と衝突する可能性があるため、.PHONYターゲットでなければならないことを認識しています。しかし、いずれの場合でも、サブディレクトリにバイナリが必要です。 – aquo

1

あなたが欲しい:

 
tool: $(bin_PROGRAMS) 

しかし、あなたは明示的にはsrc /ハローを指定するかのように、あなたは同じ問題を抱えているだろう。 (つまり、トップレベルMakefileはSRCにハローを構築する方法を知りません。)あなたは、おそらくのようなものやったほうが良いと思います:トップレベルに

 
tool: 
     cd src && $(MAKE) $(AM_MAKEFLAGS) tool 

をしてはsrc/Makefileの中で実際のルールを置きます.am、ここで依存関係を一覧表示できます。しかしそれはかなり悪い考えです。 SRC/Makefile.amで

 
all-local: 
     tool hello 

:おそらく行うための最善のことは、すべてのローカルルールを使用してのようなものを入れています。これにより、引数を指定せずにmakeを実行するたびにツールが実行されますが、helloが再構築されたときには出力が更新されません。それが受け入れられるならば、これは合理的な解決策です。別のオプションは、実行することです:SRC/Makefile.amとのsrc/Makefile.amでnoinst_DATA内のリストツールの出力で

 
tool-output: hello 
     tool hello 

+0

ありがとうございました。私は最初の解決策に固執し、サブディレクトリに再帰すると思います。私が必要とするツールはオプションであり、目的に応じて実行する必要があります。 – aquo

関連する問題