如何编写能够在静态变量中存储动态值的Makefile,该变量可以在整个make
命令中重用?在Mac OS X上,当我运行make
时,我遇到问题,我无法按照the GNU docs中的说明设置变量。
一个简单的Makefile看起来像这样。
announce:
starttime := `date`
echo The time is now $(starttime)
当我运行make announce
时,我收到以下错误。
/bin/sh: starttime: command not found
make: *** [announce] Error 127
eval
解决方法已尝试我已尝试使用a previous thread中提供的解决方案来使用$(eval myvar = "some value or expr")
。但是,我发现这种方法使变量在每次使用时动态计算。因此,考虑到下面的Makefile,我希望同一时间打印两次。
announce:
$(eval starttime = `date`)
echo The time is now $(starttime)
sleep 3
echo The time is now $(starttime)
但实际上,将打印两个不同的时间而不是一个一致的时间。
Martys-MacBook-Air:express-babel-eb marty$ make announce
echo The time is now `date`
The time is now Thu Nov 3 18:27:39 EDT 2016
sleep 3
echo The time is now `date`
The time is now Thu Nov 3 18:27:43 EDT 2016
答案 0 :(得分:0)
好的,reading more into the docs并进行了实验,我发现shell
符合我的要求。根据需要,可以使用以下Makefile两次回显相同的时间戳值。
githash := $(shell git rev-parse --short HEAD)
timestamp := $(shell date +%s)
envname := markable-$(githash)-$(timestamp)
announce:
echo $(envname)
sleep 3
echo $(envname)