Makefile变量扩展/评估

时间:2012-01-27 07:21:47

标签: makefile

目前,我正面临一个由make变量评估引起的Makefile问题。我已经降低了复杂性,只留下产生问题的基本要素。

  • $(LIST)在读取Makefile时被评估为文件列表。
  • step1期间删除其中一个文件。
  • step2 中使用该变量时,不再对其进行评估,因此在复制命令期间不再有效导致错误。
  • 如果在使用变量时对它进行评估会很好,这里是 step2

如何解决或解决此问题的任何想法?


生成文件:

LIST=$(wildcard src/*.txt)

all: step1 step2

step1:
    @echo "---------- step1 ----------"
    @echo $(LIST)
    rm src/q1.txt
    ls src

step2:
    @echo "---------- step2 ----------"
    @echo $(LIST)
    cp $(LIST) ./dst

执行记录:

$ make
---------- step1 ----------
src/q1.txt src/q2.txt
rm src/q1.txt
ls src
q2.txt
---------- step2 ----------
src/q1.txt src/q2.txt
cp src/q1.txt src/q2.txt ./dst
cp: cannot stat `src/q1.txt': No such file or directory
make: *** [step2] Error 1

1 个答案:

答案 0 :(得分:7)

不要使用通配符函数。

LIST = src/*.txt

all: step1 step2

step1:
    @echo "---------- step1 ----------"
    @echo $(LIST)
    rm src/q1.txt
    ls src

step2:
    @echo "---------- step2 ----------"
    @echo $(LIST)
    cp $(LIST) ./dst