【发布时间】:2015-10-19 10:48:39
【问题描述】:
我有以下文件和目录结构,其中包含很多文件和目录:
$ tree
input/
├── C-1-28558666
│ ├── MGRF-C1_S10_L001_R1_001.fastq.gz
│ ├── MGRF-C1_S10_L001_R2_001.fastq.gz
│ ├── MGRF-C1_S10_L002_R1_001.fastq.gz
│ ├── MGRF-C1_S10_L002_R2_001.fastq.gz
│ ├── MGRF-C1_S10_L003_R1_001.fastq.gz
│ ├── MGRF-C1_S10_L003_R2_001.fastq.gz
│ ├── MGRF-C1_S10_L004_R1_001.fastq.gz
│ └── MGRF-C1_S10_L004_R2_001.fastq.gz
├── C-2-28577664
│ ├── MGRF-C2_S11_L001_R1_001.fastq.gz
│ ├── MGRF-C2_S11_L001_R2_001.fastq.gz
│ ├── MGRF-C2_S11_L002_R1_001.fastq.gz
│ ├── MGRF-C2_S11_L002_R2_001.fastq.gz
│ ├── MGRF-C2_S11_L003_R1_001.fastq.gz
│ ├── MGRF-C2_S11_L003_R2_001.fastq.gz
│ ├── MGRF-C2_S11_L004_R1_001.fastq.gz
│ └── MGRF-C2_S11_L004_R2_001.fastq.gz
...
每个文件名都包含 R1 或 R2。具有 R1 和 R2 的文件属于一起,下面的命令使用这两个文件和一个 dm6.fasta.bwt 文件。
bwa mem ref/dm6.fasta.bwt input/C-1-28558666/MGRF-C1_S10_L001_R1_001.fastq.gz input/C-1-28558666/MGRF-C1_S10_L001_R2_001.fastq.gz | samtools view -Sb - > BAMs/C-1-28558666/MGRF-C1_S10_L001.bam
我已尝试编写以下 Makefile 规则:
BAMs/%.bam: $(addsuffix .bwt,${REFERENCE}) $(foreach SIDE,R1 R2, ../MGRF_NGS_KUMARAN-25071046/*/*${SIDE}*.fq.gz )
bwa mem ${REFERENCE} $(filter %.fq.gz,$^) | samtools view -Sb - > @>
但是,我得到了:
$ make -n
make: *** No targets. Stop.
如何修复上面的 Makefile?
【问题讨论】:
-
如果这是您的整个 makefile,那么您的问题是您没有告诉 make 实际构建任何文件。您刚刚给它一个模式来匹配目标文件名。话虽这么说,makefile 目标/等。根本不会做你想做的事。
-
我刚从第一条规则开始。我如何告诉上面的例子来构建文件?
-
您实际上需要告诉 make 构建目标:例如
make BAMs/file.bam或在您的 makefile 中有一个类似all: BAMs/file.bam BAMs/otherfile.bam ...的目标,因此 make 有一个默认值。但是就像我说的那样,您的目标规则存在 host 的其他问题。 -
您在规则中使用未经修改的
${REFERENCE}(而不是.bwt后缀版本)。 每个BAMs/%.bam文件将依赖于每个 通配的R1和R2文件(不仅仅是与输出文件名匹配的文件)。您在samtools命令上有一个尾随>。您的目录列表显示.fastq.gz,但您的makefile 使用.fq.gz(我不知道哪个是正确的)。 -
谢谢,下面的 Renaud 重写了我的 Makefile,但目前无法处理
R1和R2。