我正在嘗試編寫一個GNU Make Makefile,它具有類似目標的加載,其中構建命令在它們之間略有不同。 我試圖用target-specific variables來表示這些變化。其中一些變量值指的是我想用作先決條件的文件。例如:特定於目標的變量作爲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)
當我喊「讓target_1」,我想它做target1_prereq如果它不存在。目前,即使使用正確的參數調用build命令(do_something),它似乎也不會使用target1_prereq作爲先決條件。
我使用的是GNU Make 3.80。
編輯:從實際系統 一些更多的併發症。一些變量本身是基於其他變量的值。手動指定先決條件不會縮放。 稍微複雜一點的例子:
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)使用二次擴展。 – Seth 2012-10-30 00:30:56
@Seth,我同意:'target_1 target_2:common_filename $$(special_filename_base).exta $$(special_filename_base).extb ...' – Beta 2012-10-30 05:02:20