Selon gnu make official doc :
Les références de variables et de fonctions dans les recettes ont une syntaxe et une sémantique identiques aux références ailleurs dans le makefile. Ils ont également les mêmes règles de cotation :si vous voulez qu'un signe dollar apparaisse dans votre recette, vous devez le doubler ("$$"). Pour les shells comme le shell par défaut, qui utilisent des signes dollar pour introduire des variables, il est important de garder à l'esprit si la variable que vous souhaitez référencer est une variable make (utilisez un seul signe dollar) ou une variable shell (utilisez deux signes dollar). /P>
Donc en bref :
- variable makefile => utiliser un seul signe dollar
- variable shell => utiliser deux signes dollar
$$ est le PID de votre processus actuel.
$ ps -ef|grep $$
user 208465 200620 0 10:30 pts/4 00:00:00 bash
$ for number in 1 2 3 4 ; do \
echo $$number ; \
done
208465number
208465number
208465number
208465number
Pas directement applicable à cet exemple -- sauf si le code affiché est exécuté via $(shell ...)
au lieu d'être une règle :
Avec l'expansion secondaire activée, make peut également interpréter le double dollar lui-même dans la deuxième phase de traitement, lorsqu'il se produit dans la liste des prérequis. (Première phase :lire le fichier, définir les variables ; deuxième phase :rechercher et invoquer les cibles de dépendance, exécuter les règles)
Ceci est utilisé pour permettre de spécifier dynamiquement des cibles de dépendance, lorsque la variable avec le nom des cibles n'est disponible que plus tard dans le fichier.
Voir https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html.