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")'
意図したとおりに機能するルール (または変数) を定義する別の方法はありますか?