1
我有一个从生物数据库下载数据的Makefile。给定一个项目编号,它应该首先下载一个文件,其中包含有关该项目的所有运行信息,然后从信息中提取登录号,然后并行下载与这些登录号相关联的FASTQ文件。我的问题是我无法让变量FASTQ被延迟到run.txt和sra.txt被下载之后。我尝试了仅订购前提条件和.SECONDEXPANSION的组合,但仍无法使其工作。它甚至有可能吗?推迟变量赋值,直到在Makefile中执行文件或规则
# Project
PROJECT := PRJNA257197
# Download
.SECONDEXPANSION:
FASTQ = $(patsubst %, %.fastq, $(shell cat sra.txt))
download: $$(FASTQ) | run.txt sra.txt
%.fastq: sra.txt
# Download FASTQ files
fastq-dump $*
sra.txt: run.txt
# Extract SRA accession numbers
cat $^ | cut -f 1 -d ',' | grep SRR | tr '\n' ' ' > [email protected]
run.txt:
# Download run information
esearch -db sra -query $(PROJECT) | efetch -format runinfo > [email protected]
您没有在该代码段中启用辅助扩展功能。你也不要在任何地方使用'download'目标。你能提供一个完整而准确的makefile来代表你的尝试吗?这就是说,你不能够知道目标,直到他们的先决条件被处理之后才能被确定。你必须以另一种方式工作。您需要获取prereq,然后您可以处理确定依赖于它的目标(生成的包含makefile在此处可能很有用)。 –
@EtanReisner我的道歉,我添加了二次扩展。下载目标是makefile中的第一个目标,所以默认情况下它会在运行make时执行。 – jma1991