如何在Mac OS X上设置Makefile变量和make?

时间:2016-11-03 22:35:15

标签: makefile gnu-make

如何编写能够在静态变量中存储动态值的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

1 个答案:

答案 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)