在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