我正在尝试编写一个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