En mi GNUmakefile, me gustaría tener una regla que use un directorio temporal. Por ejemplo:Defina la variable make en el tiempo de ejecución de la regla
out.tar: TMP := $(shell mktemp -d)
echo hi $(TMP)/hi.txt
tar -C $(TMP) cf [email protected] .
rm -rf $(TMP)
Como está escrito, la regla anterior crea el directorio temporal en el momento que la regla es analizado sintácticamente . Esto significa que, incluso yo no distingo .tar todo el tiempo, muchos directorios temporales se crean. Me gustaría evitar que my/tmp esté lleno de directorios temporales no utilizados.
¿Hay alguna manera de hacer que la variable solo se defina cuando se dispara la regla, a diferencia de cuando se define?
Mi idea principal es volcar el mktemp y tar en un script de shell, pero eso parece un tanto antiestético.
Geniales algunas aclaraciones ... esto no alcance TMP a este objetivo, ¿verdad? Entonces, si hay otras reglas que tienen su propio uso de $ (TMP) (posiblemente en paralelo con -j), puede haber conflictos? Además, ¿el @echo es incluso necesario? Parece que podrías dejarlo fuera. –
No pensé que pudieras hacerlo sin el '@ echo', pero lo probé y funciona. ¡Buena atrapada! Lo cambiaré en mi respuesta. –
En lo que respecta al alcance, la variable TMP no sería específica para esa regla en particular.Existiría en la protección de nombres global y podría entrar en conflicto con otras variables que tienen el mismo nombre. ¿Es ese el comportamiento deseado? Probablemente haya formas de evitarlo si es necesario. –