Come per gnu make official doc:
I riferimenti a variabili e funzioni nelle ricette hanno sintassi e semantica identiche ai riferimenti altrove nel makefile. Hanno anche le stesse regole di quotazione:se vuoi che appaia il simbolo del dollaro nella tua ricetta, devi raddoppiarlo ("$$"). Per shell come la shell di default, che usano i simboli del dollaro per introdurre le variabili, è importante tenere ben chiaro se la variabile a cui vuoi fare riferimento è una variabile make (usa un singolo simbolo del dollaro) o una variabile di shell (usa due simboli del dollaro). /P>
Quindi in breve:
- variabile makefile => usa un singolo simbolo del dollaro
- variabile shell => usa due simboli di dollaro
$$ è il PID del tuo processo corrente.
$ 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
Non direttamente applicabile a questo esempio -- tranne se il codice mostrato viene eseguito tramite $(shell ...)
invece di essere una regola:
Con l'espansione secondaria abilitata, make potrebbe anche interpretare il double dollar stesso nella seconda fase di elaborazione, quando compare nell'elenco dei prerequisiti. (Prima fase:lettura del file, impostazione delle variabili; seconda fase:ricerca e richiamo degli obiettivi di dipendenza, esecuzione delle regole)
Viene utilizzato per consentire di specificare dinamicamente gli obiettivi di dipendenza, quando la variabile con il nome degli obiettivi è disponibile solo successivamente nel file.
Vedi https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html.