使用GNU Make 4.1,在我的Makefile中,我可以用这个::
创建一个时间戳日志文件flush_log:
@echo "==> flush logs"
cat file > file_`date +%FT%T%Z`.log
但是要放谁:
file_`date +%FT%T%Z`.log
在Makefile中的var中,例如在其上创建wc
?
我试过(没有成功):
flush_log:
@echo "==> flush logs"
logfile:=file_$(shell date +%FT%T%Z).log
cat my_log > $(logfile)
echo `wc -l $(logfile)`
我收到此错误:
$ make flush_log
==> flush logs
logfile:=file_2016-12-24T20:09:52CET.log
/bin/sh: 1: logfile:=file_2016-12-24T20:09:52CET.log: not found
Makefile:7: recipe for target 'flush_log' failed
make: *** [flush_log] Error 127
$
我遵循https://stackoverflow.com/a/14939434/3313834和Simply扩展变量https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors
的建议答案 0 :(得分:6)
使用TAB字符缩进的makefile(出现在规则语句之后)中的每一行都是规则配方的一部分。规则的配方中的行被传递给shell进行处理,它们不会被make解析(扩展变量/函数引用除外)。
所以你的行logfile:=file...
被传递给shell并被shell解释...而且shell中没有有效的:=
运算符,所以shell认为整行都是单个单词并尝试运行具有该名称的程序,这显然不存在。
您可能想要创建一个 make 变量,该变量必须在配方之外完成,如下所示:
logfile := file_$(shell date +%FT%T%Z).log
flush_log:
@echo "==> flush logs"
cat my_log > $(logfile)
echo `wc -l $(logfile)`