在Makefile中链接动态prereq

在Makefile中链接动态prereq,makefile,prerequisites,Makefile,Prerequisites,我想找出一个生成文件的问题。我从telemetry/目录中的许多文件开始,对于每个文件,我需要在features/目录中创建相应的文件 telemetry/目录中的文件名列表缓存在filelist文件中,我定义了一个allfeats目标来包含所有文件级目标。除了allfeats目标实际上不起作用之外 我的Makefile(经过大量修剪以显示此问题)如下所示: MYSAMP:=$(shell cat filelist) allfeats: $(patsubst %,features/%-feat

我想找出一个生成文件的问题。我从
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 features/709731-feat.rds
Rscript -e 'saveRDS(process("telemetry/709731"), "features/709731-feat.rds")'

有没有一种不同的方法来定义我的规则(或变量)使其按预期工作?

我解决了这个问题。我通过以下操作生成了
文件列表
文件:

% ls telemetry > filelist
但是我忘了我的
ls
的别名是这样的:

% which ls
ls='ls -FG --color --hide="NTUSER.DAT*"'
因此,我在文件中也有着色转义序列,肉眼看不见,但在八进制转储中显示它们自己:

% head filelist | od -a
0000000 esc   [   0   m esc   [   0   m   7   0   9   7   3   1 esc   [
0000020   0   m  nl esc   [   0   m   8   0   0   3   3   3 esc   [   0
0000040   m  nl esc   [   0   m   8   0   0   3   3   4 esc   [   0   m
0000060  nl esc   [   0   m   8   0   0   3   3   5 esc   [   0   m  nl
0000100 esc   [   0   m   8   0   0   8   3   2 esc   [   0   m  nl esc
0000120   [   0   m   8   0   0   8   3   3 esc   [   0   m  nl esc   [
0000140   0   m   8   0   0   8   3   4 esc   [   0   m  nl esc   [   0
0000160   m   8   0   0   8   3   6 esc   [   0   m  nl esc   [   0   m
0000200   8   0   0   8   4   8 esc   [   0   m  nl esc   [   0   m   8
0000220   0   2   0   3   1 esc   [   0   m  nl

一旦我清除了这些文件,Makefile链接就会按预期工作。

我还可以通过将文件列表作为文本插入Makefile来解决这个问题,而不是从
文件列表
中读取。但我想避免这种情况。
% head filelist | od -a
0000000 esc   [   0   m esc   [   0   m   7   0   9   7   3   1 esc   [
0000020   0   m  nl esc   [   0   m   8   0   0   3   3   3 esc   [   0
0000040   m  nl esc   [   0   m   8   0   0   3   3   4 esc   [   0   m
0000060  nl esc   [   0   m   8   0   0   3   3   5 esc   [   0   m  nl
0000100 esc   [   0   m   8   0   0   8   3   2 esc   [   0   m  nl esc
0000120   [   0   m   8   0   0   8   3   3 esc   [   0   m  nl esc   [
0000140   0   m   8   0   0   8   3   4 esc   [   0   m  nl esc   [   0
0000160   m   8   0   0   8   3   6 esc   [   0   m  nl esc   [   0   m
0000200   8   0   0   8   4   8 esc   [   0   m  nl esc   [   0   m   8
0000220   0   2   0   3   1 esc   [   0   m  nl