Sorry, wenn dies ein dup ist, aber ich konnte es nirgends finden.Ändern Makefile Abhängigkeiten, so dass Zwischendateien nicht erstellt werden
Ich arbeite an einem Makefile, das eine Reihe von Zwischendateien erstellt, von denen viele sehr groß sind. Ich hatte das Makefile so eingerichtet, dass ich diese Zwischendateien löschen würde, aber ich glaube, es kommt nicht zurück, um mich zu beißen.
zum Beispiel, wenn Datei10 nur auf file9 abhängig ist, würde ich die depedency machen wie:
file10 : file9
file9 : file8
etc...
wenn ich im Schritt war file10
zu schaffen, würde ich alles außer file9 gelöscht haben. Allerdings, wenn ich alle Dateien löschen, und dann den Befehl ausführen:
make file10
alle Zwischendateien erstellt werden ... Ich habe versucht, die Dateinamen, da beide .INTERMEDIATE : file8 file7 ... etc
Markierung und .SECONDARY : ...
, aber das bedeutet nicht scheinen das Verhalten in irgendeiner Weise zu verändern.
Ich realisiere, das ist wahrscheinlich eine normalerweise gute Eigenschaft von make, aber ich frage mich, ob ich es in irgendeiner Weise deaktivieren kann?
Danke!
EDIT: Hier ist das komplette Makefile. Das mag für einige ein bisschen schlampig sein, ich bin sehr neu in Makefiles. Eine Sache zu beachten, die 'Fastq-Dump' Funktionen geben Dateien mit einem * _1.fastq und (in einigen Fällen) auch als * _2.fastq. Deshalb sind die Abhängigkeiten zu Beginn seltsam sind
## 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' $<
Zeigen Sie ein komplettes Beispiel, gibt es schließlich eine physische, permanente Datei, die eine Voraussetzung für 'Datei1' ist? Denn wenn nicht, dann ist es nicht verwunderlich, dass make alles neu erstellt: wenn 'file1' nicht existiert, dann muss es neu gemacht werden, was bedeutet, dass' file2' neu erstellt werden muss, was usw. bedeutet. Ich denke deine Frage zu Zwischendateien kann ein Ablenkungsmanöver sein. – user657267