Próbuję napisać plik Make Make Make GNU, który ma mnóstwo podobnych celów, gdzie polecenia kompilacji różnią się nieznacznie między nimi. Próbuję użyć target-specific variables do reprezentowania tych odmian. Niektóre z tych wartości zmiennych odnoszą się do plików, które chcę użyć jako wymagań wstępnych. Na przykład:Zmienne specyficzne dla celu jako warunki wstępne w pliku 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)
Kiedy ja nazywam 'make target_1', chcę to zrobić target1_prereq jeśli nie istnieje. W tej chwili nie wydaje się, aby użyć parametru target1_prereq jako warunku wstępnego, mimo że polecenie build (do_something) jest wywoływane z odpowiednim parametrem.
Używam GNU Make 3.80.
Edytuj: Jeszcze kilka komplikacji z prawdziwego systemu. Niektóre zmienne są oparte na wartościach innych zmiennych. Ręczne określanie wymagań wstępnych nie będzie skalowane. Nieco bardziej skomplikowany przykład:
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)
Wskrzeszanie tego wątku z korzyścią dla każdego, kto się na nim natknie. A [bardziej eleganckie rozwiązanie] (http://stackoverflow.com/questions/9311743/make-using-target-specific-variables-in-prerequisites) używa rozszerzenia wtórnego. – Seth
@Seth, Zgadzam się: 'target_1 cel_2: nazwa_pliku wspólnego $$ (nazwa_pliku_nazwa_profilu) .exta $$ (nazwa_pliku_nazwa_profilu) .extb ...' – Beta