私はGNU make Makefileを作成しようとしています。 私はtarget-specific variablesを使ってこれらのバリエーションを表現しようとしています。これらの変数の値の中には、前提条件として使用したいファイルを参照するものがあります。例えば:私は「TARGET_1 make」を呼び出すときMakefileの前提条件としてのターゲット固有の変数
target_1:special_filename=target1_prereq
target_2:special_filename=target2_prereq
target_1 target_2: common_filename $(special_filename)
do_something common_filename --a-weird-option=$(special_filename)
、私はそれが存在しない場合、それはtarget1_prereqを作りたいです。現時点では、buildコマンド(do_something)が正しいパラメータで呼び出されていても、target1_prereqを前提条件として使用していないようです。
私はGNU Make 3.80を使用しています。
編集:実際のシステムから さらにいくつかの合併症。変数のいくつかは、それ自体が他の変数の値に基づいています。前提条件を手動で指定しても縮尺は変わりません。 Aもう少し複雑な例:簡単な回避策として
target_1:special_filename_base=target1_prereq
target_2:special_filename_base=target2_prereq
some_filename_a = $(special_filename_base).exta
some_filename_b = $(special_filename_base).extb
target_1 target_2: common_filename $(special_filename_b) $(special_filename_a)
do_something common_filename --a-weird-option=$(special_filename_a) --second=$(special_filename_b)
このスレッドは、間違っている人の利益のためにこのスレッドを再起動します。 [より洗練されたソリューション](http://stackoverflow.com/questions/9311743/make-using-target-specific-variables-in-prerequisites)では、2次拡張が使用されています。 – Seth
@Seth、私は同意します: 'target_1 target_2:common_filename $$(special_filename_base).exta $$(special_filename_base).extb ...' – Beta