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