Sto provando a scrivere un Make Make GNU che ha un carico di bersagli simili, in cui i comandi di compilazione variano leggermente tra di loro. Sto provando a usare target-specific variables per rappresentare queste variazioni. Alcuni di questi valori variabili si riferiscono ai file che voglio utilizzare come prerequisiti. Per esempio:Variabili specifiche della destinazione come prerequisiti in un 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)
Quando chiamo 'fare target_1', lo voglio fare target1_prereq se non esiste. Al momento, non sembra che utilizzi target1_prereq come prerequisito, anche se il comando build (do_qualcosa) viene chiamato con il parametro giusto.
Sto usando GNU Marca 3.80.
Edit: Un paio di complicazioni del sistema reale. Alcune variabili sono a loro volta basate sui valori di altre variabili. La specifica manuale dei prerequisiti non si ridimensiona. Un esempio un po 'più complicato:
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)
Ripristinare questo thread a beneficio di chiunque altro vi si imbatta in esso. Una [soluzione più elegante] (http://stackoverflow.com/questions/9311743/make-using-target-specific-variables-in-prerequisites) utilizza l'espansione secondaria. – Seth
@Seth, sono d'accordo: 'target_1 target_2: common_filename $$ (special_nomefile_base) .exta $$ (special_filename_base) .extb ...' – Beta