Я пытаюсь написать 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, если он не существует. На данный момент, похоже, не используется target1_prereq как обязательное условие, хотя команда build (do_something) вызывается с правильным параметром.
Я использую GNU Make 3.80.
Edit: Несколько больше осложнений от реальной системы. Некоторые из переменных сами основаны на значениях других переменных. Вручное указание предварительных условий не будет масштабироваться. Несколько более сложный пример:
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
@Seth, я согласен: 'target_1 target_2: common_filename $$ (special_filename_base) .exta $$ (special_filename_base) .extb ...' – Beta