我正在尝试找出我遇到的 Makefile 问题。我从一个telemetry/
目录中的很多文件开始,对于每个文件,我需要在features/
目录中创建一个相应的文件。
目录中的文件名列表telemetry/
缓存在一个filelist
文件中,我定义了一个allfeats
目标来包含所有文件级目标。除了allfeats
目标实际上不起作用。
我的 Makefile(经过大量修剪以显示此问题)如下所示:
MYSAMP:=$(shell cat filelist)
allfeats: $(patsubst %,features/%-feat.rds,$(MYSAMP))
@echo done
features/%-feat.rds: telemetry/%
Rscript -e 'saveRDS(process("$<"), "$@")'
print-%:
@echo $* = $($*)
但我认为,关于变量传播时间的某些事情并没有让我按照我的意图链接规则:
% make -n allfeats
make: *** No rule to make target `features/709731-feat.rds', needed by `allfeats'. Stop.
如果我明确指定它,它实际上知道如何创建该目标:
% make -n features/709731-feat.rds
Rscript -e 'saveRDS(process("telemetry/709731"), "features/709731-feat.rds")'
是否有不同的方法来定义可以按预期工作的规则(或变量)?