在makefile中使用.PHONY目标的模式规则的替代方案?

时间:2015-02-03 15:21:28

标签: makefile bioinformatics

我正在编写一个用于分析生物数据的管道。管道有三个不同的部分,第一个是检查数据的质量,第二个是清理数据,第三个是对齐数据。每个部分完成后,我想在继续下一步之前手动检查结果。因此,我希望能够使用虚假目标调用每个部分(类似于您调用干净的方式),而不是使用单个模式规则链。例如:

make analysis.pipeline quality
make analysis.pipeline trim
make analysis.pipeline align

这是我当前的makefile:

# analysis pipeline

include analysis.pipeline.config

# align data
all: $(sorted_bam)

$(results)/%.sorted.bam: $(results)/%.bam
    samtools sort $^ $(basename $@)

$(results)/%.bam: $(results)/%.sam
    samtools view -bS $^ > $@

$(results)/%.sam: $(results)/%.adaprm.fastq
    bowtie2 -x $(genome) -U $^ -S $@


# clean data
.PHONY: trim
trim: $(qc_processed) $(trimmed_fastq)

$(results)/%.adaprm_fastqc.html: $(results)/%.adaprm.fastq
    fastqc -o $(@D) $^

$(results)/%.adaprm.fastq: $(data)/%.fastq
    cutadapt -a AACCGGTT $^ > $@


# check data
.PHONY: quality
quality: $(qc_raw)

$(results)/%_fastqc.html: $(data)/%.fastq
    mkdir -p $(@D) && fastqc -o $(@D) $^

makefile被编写为在src目录中运行,该目录与构建目标和依赖项的位置分开,即数据和结果目录。是否有可能以我想要的方式调用我的管道的每个部分,如果我并行运行它会有任何问题吗?这是不能在虚假目标中使用隐式模式规则的正确方法吗? / p>

更新了makefile

# objects = A.fastq B.fastq

.PHONY: quality
quality: A_fastqc.html B_fastqc.html C_fastqc.html

.PHONY: trim
trim: A.trimmed_fastqc.html B.trimmed_fastqc.html

.PHONY: align
align: A.sorted.bam.bai B.sorted.bam.bai

# ALIGN DATA SECTION
%.sorted.bam.bai: %.sorted.bam
    samtools index $^

%.sorted.bam: %.bam
    samtools sort $^ $@

%.bam: %.sam
    samtools view -bS $^ > $@

%.sam: %.trimmed.fastq %.trimmed_fastqc.html
    bowtie2 -x $(genome) -U $< -S $@

# TRIM DATA SECTION
%.trimmed_fastqc.html: %.trimmed.fastq
    fastqc $^

%.trimmed.fastq: %.adaprm.fastq
    seqtk trimfq $^ > $@

%.adaprm.fastq: %.fastq %_fastqc.html
    cutadapt -a AACCGGTT $< > $@

# CHECK QUALITY SECTION
%_fastqc.html: %.fastq
    fastqc $^

0 个答案:

没有答案