我遇到了一个我为数据处理管道编写的makefile问题。它说没有制定目标的规则,但我不明白为什么因为我有这样的规则。这是makefile:
1 ifdef $(BROAD)
2 target=$(MARK)_peaks.broadPeak
3 else
4 target=$(MARK)_peaks.narrowPeak
5 endif
6
7 all: $(target)
8
9 $(MARK)_peaks.broadPeak : $(MARK).filtered.bam $(INPUT).filtered.bam
10 macs2 callpeak -g $(GSIZE) -q 0.05 -c $(INPUT).filtered.bam -t $(MARK).filtered.bam -f BAM -n $(MA RK) -B --broad
11
12 $(MARK)_peaks.narrowPeak : $(MARK).filtered.bam $(INPUT).filtered.bam
13 macs2 callpeak -g $(GSIZE) -q 0.01 -c $(INPUT).filtered.bam -t $(MARK).filtered.bam -f BAM -n $(MA RK) -B
14
15 %.filtered.bam : %.duplicate-marked.bam
16 samtools view -b -q 15 $< > $@
17
18 %.duplicate-marked.bam : %.sorted.bam
19 picard-tools MarkDuplicates INPUT=$< OUTPUT=$@ METRICS_FILE=output.dup_metrics REMOVE_DUPLICATES=f alse ASSUME_SORTED=true VALIDATION_STRINGENCY=SILENT
调试输出是:
$ make --debug=verbose --dry-run -f chipseq-pe.makefile MARK=H3K27me3 INPUT=input ASSEMBLY=/home/ckern/galGal4.dna_sm.fa GSIZE=1.057e9 BROAD=Y
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
Reading makefiles...
Reading makefile `chipseq-pe.makefile'...
Updating goal targets....
Considering target file `all'.
File `all' does not exist.
Considering target file `H3K27me3_peaks.narrowPeak'.
File `H3K27me3_peaks.narrowPeak' does not exist.
Considering target file `H3K27me3.filtered.bam'.
File `H3K27me3.filtered.bam' does not exist.
Finished prerequisites of target file `H3K27me3.filtered.bam'.
Must remake target `H3K27me3.filtered.bam'.
make: *** No rule to make target `H3K27me3.filtered.bam', needed by `H3K27me3_peaks.narrowPeak'. Stop.
我有一个模式规则来制作任何* .filtered.bam文件,所以我不明白为什么它说没有规则来制作这个目标。