Es necesario utilizar el comando $ (operación cáscara) en el maquillaje. Si usa operation
, el comando de shell se evaluará cada vez. Si está escribiendo en un archivo de registro, no desea que el nombre del archivo de registro cambie cada vez que accede a él en un único comando make.
LOGPATH = logs
LOGFILE = $(LOGPATH)/$(shell date --iso=seconds)
test_logfile:
echo $(LOGFILE)
sleep 2s
echo $(LOGFILE)
Esta es la salida:
echo logs/2010-01-28T14:29:14-0800
logs/2010-01-28T14:29:14-0800
sleep 2s
echo logs/2010-01-28T14:29:14-0800
logs/2010-01-28T14:29:14-0800
¿No esta causa LOGFILE a ser evaulated cada vez que se utiliza. Por ejemplo: LOGFILE = logs/'date + '% y% m% d-% H:..% M:% S'' echo_logs: echo $ (LOGFILE) 5s sueño echo $ ($ LOGFILE) imprimirá:. registros de eco/'date + '% y% m% d-% H:.% m:% S'' logs/10.01.28-14: 21: 08 dormir 5s registros de eco/'fecha + '% y.% m.% d-% H:% M:% S'' registros/10.01.28-14: 21: 13 – Aaron
@ Aaron: Tienes razón; para evitar esto uno puede usar gnu make 'shell' en lugar de backticks:' LOGFILE = $ (LOGPATH) $ (fecha de shell) ' – catwalk
De acuerdo, y para completar: LOGFILE = $ (LOGPATH) $ (shell date + '% Y .% m.% d-% H:% M:% S '). También funciona en Solaris. – anisbet