2017-10-21 6 views
1

Est-il possible d'utiliser des variables générées comme dépendances dans une règle GNU Make? Je suis en train de faireVariables avec des appels de fonction en tant que dépendances dans GNU Make

A := 1 2 3 
B := a b c 
C := $(foreach X,$(A),$(foreach Y,$(B),$X-$Y)) 

a: 
    echo A 

b: 
    echo B 

$(C) : $(word 2,$(subst -, ,[email protected])) 
    echo [email protected] 

Je voudrais être en mesure d'exécuter

make 2-a 

et obtenir echo A et echo [email protected], qui est, je veux $(word 2,$(subst -, ,[email protected])) à évaluer la dépendance liste. Cependant, il semble que cela soit évalué avant que les règles ne correspondent.

Est-il possible, sans programme externe, d'avoir des variables avec des appels de fonction en tant que dépendances?

Répondre

2

Les dieux de gnumake avaient prévu vos désirs et mis en œuvre .SECONDEXPANSION:

A := 1 2 3 
B := a b c 
C := $(foreach X,$(A),$(foreach Y,$(B),$X-$Y)) 

a: 
    echo A 

b: 
    echoechoecho B 

.SECONDEXPANSION: 
$(C) : $$(word 2,$$(subst -, ,[email protected])) 
    echo [email protected] 

Toutes les règles qui apparaissent après ce label sera soumis à une deuxième extension de leur liste de pré-requis, ce qui signifie que vous pouvez utiliser des variables automatiques comme [email protected] qui ne sont pas définis lors de la première extension. Tout ce que vous devez prendre en compte, c'est que vous devez citer chaque $ (c'est-à-dire $$) qui ne prendra effet que lors de la deuxième extension de la liste des prérequis.