2016-05-29 9 views
1

申し訳ありませんが、これはダンプですが、どこにも見つかりませんでした。メイクファイルの依存関係を変更して中間ファイルを作成しない

私はたくさんの中間ファイルを作成するmakefileを作成しています。その多くは非常に大きいものです。私はmakefileをセットアップしていたので、私はこれらの中間ファイルを削除しますが、それは私に噛み付くように戻ってくるようです。私はfile10を作成するステップにあったならば、私はFILE9以外のすべてを削除しているだろう

file10 : file9 
file9 : file8 
etc... 

:depedencyよう

は、たとえば、file10のみFILE9に依存している場合、私はなるだろう。しかし、私はすべてのファイルを削除し、コマンドを実行する場合:すべての中間ファイルが作成されてい

make file10 

...私は.INTERMEDIATE : file8 file7 ... etc、および.SECONDARY : ...両方としてファイル名をマーキングしようとしたが、それはしていません何らかの形で行動を変えているようだ。

これはおそらくmakeの通常の優れた機能だと私は考えていますが、どうすればそれを無効にすることができますか?

ありがとうございます!

EDIT:完全なメークファイルです。これはいくつかのためにちょっと乱暴なかもしれません、私はmakefilesに非常に新しいです。注意すべき点として、 'fastq-dump'関数は、ファイルに* _1.fastqと(場合によっては)* _2.fastqを与えるでしょう。依存関係が最初に奇妙されている理由は、私はあなたの質問は、あなたのメイクファイルにどのように関係するかを正しく理解してきたと仮定すると、

## all   : execute all functions in this makefile (currently not being implemented) 
all: 
## run_bqsr  : runs bqsr on data using SNPs identified using SAMTOOLS mpileup command 
.PHONY : run_bqsr 
run_bqsr : $(BAMFILE)_recal_data.grp 
     module load R_3.2.2 && java -jar /opt/gatk/3.3-0/GenomeAnalysisTK.jar -T BaseRecalibrator -nct 8 -R $(REF_GENOME_PATH) -I $(BAMFILE)_realigned_reads.bam -BQSR $(BAMFILE)_recal_data.grp -o $(BAMFILE)_post_recal_data.grp -plots $(BAMFILE)_after_recal.pdf 
%_recal_data.grp : %_mpileup.bcf 
     module load module load R_3.2.2 && java -jar /opt/gatk/3.3-0/GenomeAnalysisTK.jar -T BaseRecalibrator -nct 8 -R $(REF_GENOME_PATH) -I $*_realigned_reads.bam -knownSites $*_mpileup.bcf -o $*_recal_data.grp -plots $*_before_recal.pdf 
# create a reference of 'known' SNPs using samtools mpileup. use the -B option to increase sensitivity (important not to include false negatives in analysis because it will mess up the process of adjusting base scores 
%_mpileup.bcf : %_realigned_reads.bam 
     module load samtools_1.2 && samtools mpileup -C50 --BCF -B -f $(REF_GENOME_PATH) $*_realigned_reads.bam -o $*_mpileup.bcf 

## realign_indels  : realign raw sequencing reads around indels using GATK's RealignerTargetCreator and IndelRealiner 
.PHONY : realign_indels 
realign_indels : $(BAMFILE)_realigned_reads.bam 
%_realigned_reads.bam : %_target_intervals.list 
     java -jar /opt/gatk/3.3-0/GenomeAnalysisTK.jar -T IndelRealigner -R $(REF_GENOME_PATH) -I $(BAMFILE)_dedup_reads.bam -targetIntervals $*_target_intervals.list -o $*_realigned_reads.bam && rm $(BAMFILE)_dedup_reads.ba* $(BAMFILE)_target_intervals.list 

%_target_intervals.list : $(BAMFILE)_dedup_reads.bam 
     java -jar /opt/gatk/3.3-0/GenomeAnalysisTK.jar -T RealignerTargetCreator -nt 8 -R $(REF_GENOME_PATH) -I $(BAMFILE)_dedup_reads.bam -o $*_target_intervals.list 

## remove_dups : remove duplicate reads from SAMfiles, sort, and convert to a single merged BAM file 
.PHONY : remove_dups 
remove_dups : $(BAMFILE)_dedup_reads.bam 
$(BAMFILE)_dedup_reads.bam : $(SAMFILES) 
     mkdir -p $(BAMFILE_DIR)/metrics; java -jar /opt/picard/1.72/MarkDuplicates.jar $(addprefix I=, $(SAMFILES)) OUTPUT=$(BAMFILE)_dedup_reads.bam M=$(BAMFILE_DIR)/metrics/$(QUERY_INPUT).metrics && java -jar /opt/picard/1.72/BuildBamIndex.jar I=$(BAMFILE)_dedup_reads.bam && rm -r $(SAMFILE_TEMPDIR)/* $(FASTQ_DIR)/* 
#mark samfiles and fastq files as secondary: 
.INTERMEDIATE : $(SAMFILE_TEMPDIR)/* $(FASTQ_DIR)/* 
## map_fastqs : map fastq files to appropriate genome 
.PHONY : map_fastqs 
map_fastqs : $(SAMFILES) 
%_sorted.sam : $(FASTQs) 
     module load bwa_0.7.13; mkdir -p $(dir $*) ; if echo $(PAIRED) | grep $(notdir $*); then bwa mem -M -R '@RG\tID:$(notdir $*)$(RG)' $(REF_GENOME_PATH) $(FASTQ_DIR)/$(notdir $*)_1.fastq $(FASTQ_DIR)/$(notdir $*)_2.fastq > $*.sam ; else bwa mem -M -R '@RG\tID:$(notdir $*)$(RG)' $(REF_GENOME_PATH) $(FASTQ_DIR)/$(notdir $*)_1.fastq > $*.sam; fi && java -jar /opt/picard/1.72/SortSam.jar I=$*.sam O=$*_sorted.sam SORT_ORDER=coordinate 

## print_fastqs : print full path fastq files to be written 
.PHONY : print_fastqs 
print_fastqs : 
     @echo $(addprefix ../FASTQ/$(QUERY_INPUT)/,$(ALL_FASTQs)) 
## get_fastqs : get all fastq files for particular query: 
.PHONY : get_fastqs 
get_fastqs : $(ALL_FASTQs) 
%_2.fastq : %_1.fastq 
     $(MARK_READS_EXE) $*_1.fastq && $(MARK_READS_EXE) $*_2.fastq 
%_1.fastq : 
     mkdir -p $(dir $*); cd $(dir $*); $(FASTQDUMP_EXE) --split-files -F -I -X 10000 $(notdir $*) 
#$(ALL_FASTQs) : $(FASTQs) 
#  echo $* $< 
## give_org  : print organism of this biosample 
.PHONY : give_org 
give_org : 
     @echo $(ORGANISM) 

## print_SRRs : print the SRR files that will be downloaded 
.PHONY : print_SRRs 
print_SRRs : 
     @printf '\nPAIRED = $(PAIRED)\nUNPAIRED = $(UNPAIRED)\n' 

## clean    : clean up temporary files 
.PHONY : clean 
clean : 
     rm $(FASTQ_DIR)/SRR* $(SAMFILE_TEMPDIR)/*.sam $(BAMFILE_DIR)/$(QUERY_INPUT)* 

## help   : print help statement 
.PHONY : help 
help : makefile 
     @sed -n 's/^##//p' $< 
+1

完全な例を示します。最終的に 'file1'の前提条件となる物理的永続ファイルがありますか? 'file1'が存在しない場合、それは再作成する必要があります。つまり、' file2'は再作成する必要があり、等を意味します。中間ファイルについてのあなたの質問と思います赤ちゃんかもしれません。 – user657267

答えて

1

だ、%_1.fastq :は作る意味し、前提条件はありませんは常に一致するターゲットをリメイクますこのパターンが存在しなければこのパターン。

それがすべての前提条件を持っている場合、これらのファイルがすべてで中間ファイルではありません、あなたはあなたが彼らに

$(filter %_1.fastq,$(ALL_FASTQs)): 
    # Recipe 

のようなものとの明確な目標をできことによって、できるだけ多くを作る伝える必要がありますされていない場合、その後、それらを追加.PRECIOUS: %_1.fastqと同じことをしますが、レシピが失敗したときにファイルを残すという追加の効果がありますが、これはおそらくあなたが望むものではありません。

関連する問題