私はGNU makeで構築する2つのプロジェクトを持っています。プロジェクトBは、プロジェクトAの出力の1つに依存します。それをOUTPUTとしましょう。だから、プロジェクトBのためのMakefileはこのようなものが含まれます。そのOUTPUTが最新であることを確認するにはGNU makeでプロジェクト間の依存関係を処理する
target: ../ProjectA/OUTPUT
do stuff
を出力した場合、私はB、Aのためのメイクを起動してからのみ、「ものを行う」ことのためにMakefileを希望します再建された(またはすでに目標よりも新しい)。
私が最初にそれをこのようにやってみました:
../ProjectA/OUTPUT:
(cd ../ProjectA; $(MAKE) OUTPUT)
をしかしOUTPUTに指定された依存関係が存在しないので、単にそれが存在する場合、それが最新であることを仮定しますと、サブのmakeを実行しません作ります。
.PHONY: ../ProjectA/OUTPUT
../ProjectA/OUTPUT:
(cd ../ProjectA; $(MAKE) OUTPUT)
を今OUTPUTに実際の日付を無視して、常にそれがターゲットより新しいと考えて、「ものを行う」を意味します作る:OUTPUTが偽であることを宣言
は、サブmakeが実行されることを保証します常に実行されます。
私が見つけた唯一のことは、BのMakefile内のOUTPUTの依存関係ツリー全体を複製することです。それは熟考するにはあまりにも恐ろしいです。 OUTPUTの依存関係ツリーを、別々のファイルに入れて、両方のプロジェクトのMakefilesに含めることはわずかに恐ろしいことです。
私がしたいことをやり遂げるためのより良い方法はありますか?
、価値は十分読み取ります。http://aegis.sourceforge .net/auug97.pdf –
あなたの依存関係を定義するのに全力を尽くしていないようです。 ProjectAが依存するProjectBの結果が見つかるか、まったく見つからない場合は、再構築しないというメイクの失敗ではありません。プロジェクト管理者が新しいタイムスタンプを取得したい場合は、明示的に指定し、ProjectAとBに依存させるようにします。 – Vroomfondel