Según gnu make oficial doc:
Las referencias a variables y funciones en las recetas tienen una sintaxis y una semántica idénticas a las referencias en otras partes del archivo MAKE. También tienen las mismas reglas de cotización:si desea que aparezca un signo de dólar en su receta, debe duplicarlo ("$$"). Para shells como el shell predeterminado, que usa signos de dólar para introducir variables, es importante tener claro si la variable a la que desea hacer referencia es una variable make (use un solo signo de dólar) o una variable de shell (use dos signos de dólar).
En resumen:
- variable makefile => usar un solo signo de dólar
- variable de shell => usar dos signos de dólar
$$ es el PID de su proceso actual.
$ 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
No se aplica directamente a este ejemplo, excepto si el código que se muestra se ejecuta a través de $(shell ...)
en lugar de ser una regla:
Con la expansión secundaria habilitada, make también podría interpretar el dólar doble en la segunda fase de procesamiento, cuando aparece en la lista de requisitos previos. (Primera fase:leer archivo, establecer variables; segunda fase:encontrar e invocar objetivos de dependencia, ejecutar reglas)
Esto se usa para permitir la especificación dinámica de destinos de dependencia, cuando la variable con el nombre de destino solo está disponible más adelante en el archivo.
Consulte https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html.