在makefile中使用.PHONY目标的模式规则的替代方案?
我正在写一篇分析生物数据的文章。管道有三个不同的部分,第一部分是检查数据的质量,第二部分是清理数据,第三部分是对齐数据。在每个部分完成后,我想在继续下一部分之前手动检查结果。因此,我希望能够使用类似于您如何调用clean的虚假目标来调用每个部分,而不是使用单个模式规则链。例如:在makefile中使用.PHONY目标的模式规则的替代方案?,makefile,bioinformatics,Makefile,Bioinformatics,我正在写一篇分析生物数据的文章。管道有三个不同的部分,第一部分是检查数据的质量,第二部分是清理数据,第三部分是对齐数据。在每个部分完成后,我想在继续下一部分之前手动检查结果。因此,我希望能够使用类似于您如何调用clean的虚假目标来调用每个部分,而不是使用单个模式规则链。例如: make analysis.pipeline quality make analysis.pipeline trim make analysis.pipeline align 这是我当前的makefile: # ana
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目录中运行,该目录与构建目标和依赖项的位置(即数据和结果目录)是分开的。是否可以按照我的意愿调用管道的每个部分,如果我并行运行,是否会出现任何问题,这是避免在虚假目标中使用隐式模式规则的正确方法
更新的makefile
我没有完全遵循makefile,一些变量定义似乎缺失,但make analysis.pipeline质量告诉make运行两个目标。这听起来不像你的意思。在任何情况下,我认为正确的想法是编写makefile,这样它就可以像从上到下链接一样正常使用,然后编写。虚假目标,它依赖于每个阶段作为输出的所有不同文件,这样你就可以在任何需要的阶段跳转到管道中。@EtanReisner是,你所描述的完全符合。我已经用新的makefile更新了我的帖子。我已经通过以下方式对管道进行了一次试运行:1运行而不命名目标->仅使第一个配方运行2运行,同时将质量、修剪或对齐命名为目标->使每个部分的配方运行,包括之前的部分。这似乎有效,因此我认为我已经正确地将您的建议付诸实践,从更新的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 $^