目前我在处理一个Makefile问题,这是由于对一个make变量进行评估而引起的。我已经简化了复杂度,只留下产生问题的基本元素。
- $(LIST) 被评估为一个文件列表,当Makefile被读取时。
- 在step1过程中,其中一个文件被删除了。
- 在step2中使用变量时,它不会再次被评估,因此不再有效,这导致复制命令时出现错误。
- 如果变量在使用时被评估,即在step2期间进行评估,那将是很好的。
有什么想法来解决或解决这个问题吗?
Makefile:
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
echo
和cp
命令中,其中shell为每个命令再次扩展它(而不是make
,它执行了$(wildcard)
的扩展)。 - Jack Kelly