Я пытаюсь написать GNU 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)
Когда я вызываю 'make target_1', я хочу, чтобы он сделал target1_prereq, если он не существует.На данный момент он не использует target1_prereq в качестве предварительного условия, хотя команда сборки (do_something) вызывается с правильным параметром.
Я использую 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)