在Makefile中使用变量 [英] Using variables in Makefile

查看:112
本文介绍了在Makefile中使用变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个简单的Makefile.

Here is a simple Makefile.

FILENAME=test.`date +"%Y.%m.%d %H:%M:%S"`.txt
test:
    @echo ${FILENAME}
    @sleep 2s
    @echo ${FILENAME}

make test的输出是

test.2013.02.18 15:30:23.txt
test.2013.02.18 15:30:25.txt

问题在于,每次使用FILENAME时都在计算它.我希望只计算一次,并且在脚本运行时保持不变.我做错了吗?

The problem is that FILENAME is being calculated each time it is used. I want it to be calculated only once and be the same while script is running. Am I doing it wrong?

推荐答案

GNU Make具有两种变量.您已经使用了递归扩展的变量,但是想要一个简单扩展的变量.参见 http://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors

GNU Make has two flavours of variables. You have used a recursively-expanded variable, but you want a simply-expanded variable. See http://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors

对于当前的Makefile,变量包含确切的文本test.date +"%Y.%m.%d %H:%M:%S" .txt ,并且每次引用该变量时,该文本都会被逐字替换,因此您的Makefile等效于:

With your current Makefile, the variable contains the exact text test.date +"%Y.%m.%d %H:%M:%S".txt and every time you reference it that text gets substituted verbatim, and so your Makefile is equivalent to:

test:
    @echo test.`date +"%Y.%m.%d %H:%M:%S"`.txt
    @sleep 2s
    @echo test.`date +"%Y.%m.%d %H:%M:%S"`.txt

这样看来,外壳程序两次运行date命令应该很明显.

Seen like this it should be obvious that the shell runs the date command twice.

要获得所需的行为,您需要设置一个简单扩展的变量,并且需要在定义变量的位置运行shell命令,该命令不能使用反引号,因为反引号是shell的元字符,但Make会忽略它们,因此您可以使用Make的shell函数:

To get the behaviour you want, you need to set a simply-expanded variable and you need to run the shell command at the point where you define it, which can't use backticks because they are shell metacharacters but Make ignores them, so you use Make's shell function instead:

FILENAME := test.$(shell date +"%Y.%m.%d %H:%M:%S").txt

这篇关于在Makefile中使用变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆