始终重建依赖关系

时间:2016-07-15 18:06:54

标签: makefile targets

当我使用没有变量目标的Makefile时,一切正常

ON R.SITE_ID = ST.SITE_ID

但是,当我介绍目标变量时,所涉及的任务总是在运行。

preamble:
        mkdir -p data
        touch $@

data/a: preamble
        touch $@

data/b: data/a
        touch $@

data/c: data/a
        touch $@

data/d: data/b data/c
        touch $@

diamond: data/a data/b data/c data/d
        touch $@

.PHONY: clean
clean:
        rm -rf ${data} diamond preamble

始终执行

data="data"
preamble:
        mkdir -p ${data}
        touch $@

${data}/a: preamble
        touch $@

${data}/b: data/a
        touch $@

${data}/c: data/a
        touch $@

${data}/d: data/b data/c
        touch $@

diamond: ${data}/a ${data}/b ${data}/c ${data}/d
        touch $@

.PHONY: clean
clean:
        rm -rf ${data} diamond preamble

在目标中包含变量的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我建议不要使用引号。 Makefile不需要它们,它们使文件名混淆。

更常见的是用带括号的$(DATA)而不是$ {DATA}花括号。

另外,作为一种惯例,我建议在所有大写字母中使用变量名称。称之为DATA而不是数据。