2009-12-07 6 views

ответ

19

вы можете использовать это:

LOGFILE=$(LOGPATH) `date +'%y.%m.%d %H:%M:%S'` 
+3

Будет ли это причиной LOGFILE быть evaulated каждый раз, когда он используется. Например: LOGFILE = журналы/'дата + '% г% м% d-% Н:..% M:% S'' echo_logs: эхо $ (LOGFILE) 5s сна эхо $ ($ LOGFILE) будет печатать:. эхо-журналы/'дата + '% г% м% d-% Н:.% М:% S'' журналы/10.01.28-14: 21: 08 sleep 5s echo logs/'date + '% y.% m.% d-% H:% M:% S'' logs/10.01.28-14: 21: 13 – Aaron

+4

@Aaron: Вы правы; чтобы избежать этого, можно использовать gnu make 'shell' вместо backticks:' LOGFILE = $ (LOGPATH) $ (дата оболочки) ' – catwalk

+1

Согласовано и для полноты: LOGFILE = $ (LOGPATH) $ (дата оболочки + '% Y ..% м% d-% H:% M:% S '). Также работает на Solaris. – anisbet

24

Вы должны использовать команду $ (операция оболочки) в производстве. Если вы используете operation, тогда команда оболочки будет оцениваться каждый раз. Если вы пишете файл журнала, вы не хотите, чтобы имя файла журнала изменялось каждый раз, когда вы обращаетесь к нему в одной команде make.

LOGPATH = logs 
LOGFILE = $(LOGPATH)/$(shell date --iso=seconds) 

test_logfile: 
    echo $(LOGFILE) 
    sleep 2s 
    echo $(LOGFILE) 

Этот выход будет:

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 
+2

Но это не остается таким же на разных объектах. –

Смежные вопросы