From: Don Armstrong Date: Wed, 5 Aug 2015 18:20:32 +0000 (-0700) Subject: show how to handle timestamps X-Git-Url: https://git.donarmstrong.com/?p=using_make_for_science.git;a=commitdiff_plain;h=efca486c9cd9f5f602ccd59864442f2e93341b9a show how to handle timestamps --- diff --git a/using_make_for_science.Rnw b/using_make_for_science.Rnw index 4e0ae03..29df376 100644 --- a/using_make_for_science.Rnw +++ b/using_make_for_science.Rnw @@ -367,18 +367,13 @@ $(SRX)_genes.fpkm_tracking: $(SRX)_star.bam $(BOWTIE_INDEX_DIR)$(GTF) \begin{frame}[fragile]{Run it on biocluster} \begin{minted}{shell} -for a in SRX*/Makefile; do - (cd $(dirname $a); - MAKE_TARGET=call qsub -q default \ - -v MAKE_TARGET -S /bin/bash \ - -d "$(pwd)" -l "nodes=1:ppn=8,mem=70G" \ - ~donarm/uiuc_igb_scripts/run_make - ); -done; -\end{minted} %$ +~donarm/uiuc_igb_scripts/dqsub --mem 70G \ + --ppn 8 make call; +\end{minted} \begin{itemize} -\item Use qsub and some shell scripting to run everything -\item Uses a special script which calls make with a specific target +\item dqsub is my own qsub wrapper which avoids me having to write + little scripts for everything +\item \url{http://git.donarmstrong.com/?p=uiuc_igb_scripts.git;a=blob;f=dqsub} \end{itemize} \end{frame} @@ -394,6 +389,23 @@ done; \subsection{Timestamps} \begin{frame}{Dealing with timestamps} + \begin{itemize} + \item Make builds things on the basis of timestamps + \item But what if the contents haven't changed and it's expensive to + rebuild? + \item Use md5sum! + \end{itemize} +\begin{minted}[showtabs,breaklines]{make} +TARGET: PREREQ1 PREREQ1 + if [ -e $@.target.md5sum ] && [ -e $@ ] && \ + md5sum --status --check $@.target.md5sum; \ + then \ + touch $@; \ + else \ + RECIPE FOR $@; \ + md5sum $^ > $@.target.md5sum; \ + fi; +\end{minted} \end{frame} \subsection{Complicated Workflows}