Difference between revisions of "Make file tutorial"

From Genome Analysis Wiki
Jump to navigationJump to search
 
(28 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
= Introduction =
 
= Introduction =
  
GNU Make is often thought of as a tool for managing the compilation of large C programs. This is true, but it's potential is not limited to this!   
+
GNU Make is often thought of as a tool for managing the compilation of large C programs. This is true, but its potential is not limited to this!   
  
At its core, It is a generic pipelining framework that is aware of dependencies and can run steps in parallel.  
+
At its core, it is a generic pipelining framework that is aware of dependencies and can run steps in parallel.  
  
Statistical genetics analyses often requires multitudinous steps to prepare the data, run computationally expensive analyses and then collating the data.  
+
Statistical genetics analyses (or any big data analyses in general) often requires multiple steps to prepare the data, running computationally expensive analyses, and then collating the data.  
  
Make can potentially save you lots of time and hair pulling especially when your supervisor asks for ALL the analyses again but this time only with rare variants.
+
Make can instead of simply compiling codes, may also execute the steps in your analyses.
 +
 
 +
Make allows you to redo part of your analyses and rerun only the parts which are affected by the change.
 +
 
 +
Using Make potentially save you lots of time and hair pulling especially when your supervisor asks for ALL the analyses again but this time only with rare variants.
 +
 
 +
Using a script to generate a make file allows you to document the steps required in the analysis too and makes it easier in the future when the analysis is revisited.
 +
 
 +
= Basic Idea =
 +
 
 +
  The general format of a make file is as follows:
 +
 
 +
  <target> : <dependency> ...
 +
      <command 1>
 +
      <command 2>
 +
 
 +
 
 +
  The target is usually a small file that is created using "touch <target>". 
 +
  It can be considered as a text and in this case, it is referred via "make <target>"
 +
 
 +
  The dependency(ies) are files.
 +
 +
  The commands are single line commands in linux. 
 +
  The last command is the touch command usually. 
 +
  This allows the creation of a file to signify that the prior commands were executed successfully.
 +
 
 +
 
 +
  A perl script is written to generate the make file,  in this script, you may document the analyses and
 +
  allow options to customize the variables in your analyses.
 +
 
 +
  Once the make file is generated, you can run it with make using the -j option for parallelization.
 +
 
 +
  If a part of the analyses has to be re performed, simply delete the relevant target file, make will
 +
  rerun the analyses and redo steps that occur after that particular step. 
 +
 
 +
  Some other useful options in Make are -k for running the analyses as far as possible without
 +
  terminating the entire pipeline and -t for generating all the target files chronologically.
 +
 
 +
  For commands that involves a series of pipes, you can use "set pipefail" in a bash environment
 +
  to ensure that the an error is returned if any stage of the pipe fails.  If this is not done, the return
 +
  code of the last process in the pipe will be returned and Make will think that this series of commands
 +
  has completed successfully.
  
 
= Example =
 
= Example =
Line 21: Line 62:
 
   #generate make file using perl script
 
   #generate make file using perl script
 
   ./generate_simple_stuff
 
   ./generate_simple_stuff
 +
 +
  #generate make file using perl script to launch jobs on slurm
 +
  ./generate_simple_stuff -l slurm
 +
 +
  #generate make file using perl script to launch jobs on slurm
 +
  #files are stored in <dir> which must be described as an absolute path
 +
  ./generate_simple_stuff -l slurm -o <dir>
  
 
   #run make file sequentially
 
   #run make file sequentially
Line 50: Line 98:
 
=head1 SYNOPSIS
 
=head1 SYNOPSIS
  
  generate_simple_stuff_makefile [options]
+
  generate_simple_stuff_makefile [options]
  
 
   -o    output directory : location of all output files
 
   -o    output directory : location of all output files
 
   -m    output make file
 
   -m    output make file
 
+
 
 
  example: ./generate_simple_stuff_makefile.pl
 
  example: ./generate_simple_stuff_makefile.pl
  
 
=head1 DESCRIPTION
 
=head1 DESCRIPTION
+
 
 
=cut
 
=cut
  
Line 67: Line 115:
 
my $outputDir = getcwd();
 
my $outputDir = getcwd();
 
my $makeFile = "simple_stuff.mk";
 
my $makeFile = "simple_stuff.mk";
 +
my $launchMethod = "local";
  
 
#initialize options
 
#initialize options
Line 73: Line 122:
 
if(!GetOptions ('h'=>\$help, 'v'=>\$verbose, 'd'=>\$debug,
 
if(!GetOptions ('h'=>\$help, 'v'=>\$verbose, 'd'=>\$debug,
 
                 'o:s'=>\$outputDir,
 
                 'o:s'=>\$outputDir,
                 'm:s'=>\$makeFile)  
+
                'l:s'=>\$launchMethod,
   || !defined($outputDir)  
+
                 'm:s'=>\$makeFile)
 +
   || !defined($outputDir)
 
   || scalar(@ARGV)!=0)
 
   || scalar(@ARGV)!=0)
 
{
 
{
Line 85: Line 135:
 
         pod2usage(1);
 
         pod2usage(1);
 
     }
 
     }
 +
}
 +
 +
if ($launchMethod ne "local" && $launchMethod ne "slurm")
 +
{
 +
    print STDERR "Launch method has to be local or slurm\n";
 +
    exit(1);
 
}
 
}
  
Line 93: Line 149:
 
printf("\n");
 
printf("\n");
 
printf("output directory : %s\n", $outputDir);
 
printf("output directory : %s\n", $outputDir);
 +
printf("launch method    : %s\n", $launchMethod);
 
printf("\n");
 
printf("\n");
  
Line 129: Line 186:
 
     $dep = "";
 
     $dep = "";
 
     @cmd = ("echo $i > $outputDir/$i.log");
 
     @cmd = ("echo $i > $outputDir/$i.log");
     #makeLocalStep($tgt, $dep, @cmd);
+
     makeJob($launchMethod, $tgt, $dep, @cmd);
    makeSlurm($tgt, $dep, @cmd);  
 
 
}
 
}
  
Line 140: Line 196:
 
$dep = $inputFilesOK;
 
$dep = $inputFilesOK;
 
@cmd = ("cat $inputFiles > $outputFile");
 
@cmd = ("cat $inputFiles > $outputFile");
#makeLocalStep($tgt, $dep, @cmd);
+
makeJob($launchMethod, $tgt, $dep, @cmd);
makeSlurm($tgt, $dep, @cmd);  
+
 
 
 
###########################
 
###########################
 
#3. Cleanup temporary files
 
#3. Cleanup temporary files
 
###########################
 
###########################
 
$tgt = "$outputDir/cleaned.OK";
 
$tgt = "$outputDir/cleaned.OK";
$dep = "$outputDir/all.log";
+
$dep = "$outputDir/all.log.OK";
 
@cmd = ("rm $inputFiles");
 
@cmd = ("rm $inputFiles");
#makeLocalStep($tgt, $dep, @cmd);
+
makeJob($launchMethod, $tgt, $dep, @cmd);
makeSlurm($tgt, $dep, @cmd);  
+
 
 
 
#*******************
 
#*******************
 
#Write out make file
 
#Write out make file
Line 174: Line 228:
 
#functions
 
#functions
 
##########
 
##########
 +
 +
#run a job either locally or by slurm
 +
sub makeJob
 +
{
 +
    my ($method, $tgt, $dep, @cmd) = @_;
 +
 +
    if ($method eq "local")
 +
    {
 +
        makeLocalStep($tgt, $dep, @cmd);
 +
    }
 +
    elsif ($method eq "slurm")
 +
    {
 +
        makeSlurm($tgt, $dep, @cmd);
 +
    }
 +
}
  
 
#run slurm jobs
 
#run slurm jobs
sub makeSlurm  
+
sub makeSlurm
 
{
 
{
 
     my ($tgt, $dep, @cmd) = @_;
 
     my ($tgt, $dep, @cmd) = @_;
Line 208: Line 277:
 
</source>
 
</source>
  
= Solution =
 
  
Makefiles are more than just tools for compiling programs. The dependency structure of a makefile
+
= Generated Makefile =
allows one to run and rerun an analysis pipeline in a convenient fashion.
+
 
 +
<source lang=css>
 +
.DELETE_ON_ERROR:
 +
 
 +
all: /net/fantasia/home/atks/makefile_tutorial/1.OK /net/fantasia/home/atks/makefile_tutorial/2.OK /net/fantasia/home/atks/makefile_tutorial/3.OK /net/fantasia/home/atks/makefile_tutorial/4.OK /net/fantasia/home/atks/makefile_tutorial/5.OK /net/fantasia/home/atks/makefile_tutorial/6.OK /net/fantasia/home/atks/makefile_tutorial/7.OK /net/fantasia/home/atks/makefile_tutorial/8.OK /net/fantasia/home/atks/makefile_tutorial/9.OK /net/fantasia/home/atks/makefile_tutorial/10.OK /net/fantasia/home/atks/makefile_tutorial/11.OK /net/fantasia/home/atks/makefile_tutorial/12.OK /net/fantasia/home/atks/makefile_tutorial/13.OK /net/fantasia/home/atks/makefile_tutorial/14.OK /net/fantasia/home/atks/makefile_tutorial/15.OK /net/fantasia/home/atks/makefile_tutorial/16.OK /net/fantasia/home/atks/makefile_tutorial/17.OK /net/fantasia/home/atks/makefile_tutorial/18.OK /net/fantasia/home/atks/makefile_tutorial/19.OK /net/fantasia/home/atks/makefile_tutorial/20.OK /net/fantasia/home/atks/makefile_tutorial/21.OK /net/fantasia/home/atks/makefile_tutorial/22.OK /net/fantasia/home/atks/makefile_tutorial/23.OK /net/fantasia/home/atks/makefile_tutorial/24.OK /net/fantasia/home/atks/makefile_tutorial/25.OK /net/fantasia/home/atks/makefile_tutorial/26.OK /net/fantasia/home/atks/makefile_tutorial/27.OK /net/fantasia/home/atks/makefile_tutorial/28.OK /net/fantasia/home/atks/makefile_tutorial/29.OK /net/fantasia/home/atks/makefile_tutorial/30.OK /net/fantasia/home/atks/makefile_tutorial/31.OK /net/fantasia/home/atks/makefile_tutorial/32.OK /net/fantasia/home/atks/makefile_tutorial/33.OK /net/fantasia/home/atks/makefile_tutorial/34.OK /net/fantasia/home/atks/makefile_tutorial/35.OK /net/fantasia/home/atks/makefile_tutorial/36.OK /net/fantasia/home/atks/makefile_tutorial/37.OK /net/fantasia/home/atks/makefile_tutorial/38.OK /net/fantasia/home/atks/makefile_tutorial/39.OK /net/fantasia/home/atks/makefile_tutorial/40.OK /net/fantasia/home/atks/makefile_tutorial/41.OK /net/fantasia/home/atks/makefile_tutorial/42.OK /net/fantasia/home/atks/makefile_tutorial/43.OK /net/fantasia/home/atks/makefile_tutorial/44.OK /net/fantasia/home/atks/makefile_tutorial/45.OK /net/fantasia/home/atks/makefile_tutorial/46.OK /net/fantasia/home/atks/makefile_tutorial/47.OK /net/fantasia/home/atks/makefile_tutorial/48.OK /net/fantasia/home/atks/makefile_tutorial/49.OK /net/fantasia/home/atks/makefile_tutorial/50.OK /net/fantasia/home/atks/makefile_tutorial/51.OK /net/fantasia/home/atks/makefile_tutorial/52.OK /net/fantasia/home/atks/makefile_tutorial/53.OK /net/fantasia/home/atks/makefile_tutorial/54.OK /net/fantasia/home/atks/makefile_tutorial/55.OK /net/fantasia/home/atks/makefile_tutorial/56.OK /net/fantasia/home/atks/makefile_tutorial/57.OK /net/fantasia/home/atks/makefile_tutorial/58.OK /net/fantasia/home/atks/makefile_tutorial/59.OK /net/fantasia/home/atks/makefile_tutorial/60.OK /net/fantasia/home/atks/makefile_tutorial/61.OK /net/fantasia/home/atks/makefile_tutorial/62.OK /net/fantasia/home/atks/makefile_tutorial/63.OK /net/fantasia/home/atks/makefile_tutorial/64.OK /net/fantasia/home/atks/makefile_tutorial/65.OK /net/fantasia/home/atks/makefile_tutorial/66.OK /net/fantasia/home/atks/makefile_tutorial/67.OK /net/fantasia/home/atks/makefile_tutorial/68.OK /net/fantasia/home/atks/makefile_tutorial/69.OK /net/fantasia/home/atks/makefile_tutorial/70.OK /net/fantasia/home/atks/makefile_tutorial/71.OK /net/fantasia/home/atks/makefile_tutorial/72.OK /net/fantasia/home/atks/makefile_tutorial/73.OK /net/fantasia/home/atks/makefile_tutorial/74.OK /net/fantasia/home/atks/makefile_tutorial/75.OK /net/fantasia/home/atks/makefile_tutorial/76.OK /net/fantasia/home/atks/makefile_tutorial/77.OK /net/fantasia/home/atks/makefile_tutorial/78.OK /net/fantasia/home/atks/makefile_tutorial/79.OK /net/fantasia/home/atks/makefile_tutorial/80.OK /net/fantasia/home/atks/makefile_tutorial/81.OK /net/fantasia/home/atks/makefile_tutorial/82.OK /net/fantasia/home/atks/makefile_tutorial/83.OK /net/fantasia/home/atks/makefile_tutorial/84.OK /net/fantasia/home/atks/makefile_tutorial/85.OK /net/fantasia/home/atks/makefile_tutorial/86.OK /net/fantasia/home/atks/makefile_tutorial/87.OK /net/fantasia/home/atks/makefile_tutorial/88.OK /net/fantasia/home/atks/makefile_tutorial/89.OK /net/fantasia/home/atks/makefile_tutorial/90.OK /net/fantasia/home/atks/makefile_tutorial/91.OK /net/fantasia/home/atks/makefile_tutorial/92.OK /net/fantasia/home/atks/makefile_tutorial/93.OK /net/fantasia/home/atks/makefile_tutorial/94.OK /net/fantasia/home/atks/makefile_tutorial/95.OK /net/fantasia/home/atks/makefile_tutorial/96.OK /net/fantasia/home/atks/makefile_tutorial/97.OK /net/fantasia/home/atks/makefile_tutorial/98.OK /net/fantasia/home/atks/makefile_tutorial/99.OK /net/fantasia/home/atks/makefile_tutorial/100.OK /net/fantasia/home/atks/makefile_tutorial/all.log.OK /net/fantasia/home/atks/makefile_tutorial/cleaned.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/1.OK:
 +
srun echo 1 > /net/fantasia/home/atks/makefile_tutorial/1.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/1.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/2.OK:
 +
srun echo 2 > /net/fantasia/home/atks/makefile_tutorial/2.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/2.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/3.OK:
 +
srun echo 3 > /net/fantasia/home/atks/makefile_tutorial/3.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/3.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/4.OK:
 +
srun echo 4 > /net/fantasia/home/atks/makefile_tutorial/4.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/4.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/5.OK:
 +
srun echo 5 > /net/fantasia/home/atks/makefile_tutorial/5.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/5.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/6.OK:
 +
srun echo 6 > /net/fantasia/home/atks/makefile_tutorial/6.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/6.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/7.OK:
 +
srun echo 7 > /net/fantasia/home/atks/makefile_tutorial/7.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/7.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/8.OK:
 +
srun echo 8 > /net/fantasia/home/atks/makefile_tutorial/8.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/8.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/9.OK:
 +
srun echo 9 > /net/fantasia/home/atks/makefile_tutorial/9.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/9.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/10.OK:
 +
srun echo 10 > /net/fantasia/home/atks/makefile_tutorial/10.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/10.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/11.OK:
 +
srun echo 11 > /net/fantasia/home/atks/makefile_tutorial/11.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/11.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/12.OK:
 +
srun echo 12 > /net/fantasia/home/atks/makefile_tutorial/12.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/12.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/13.OK:
 +
srun echo 13 > /net/fantasia/home/atks/makefile_tutorial/13.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/13.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/14.OK:
 +
srun echo 14 > /net/fantasia/home/atks/makefile_tutorial/14.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/14.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/15.OK:
 +
srun echo 15 > /net/fantasia/home/atks/makefile_tutorial/15.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/15.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/16.OK:
 +
srun echo 16 > /net/fantasia/home/atks/makefile_tutorial/16.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/16.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/17.OK:
 +
srun echo 17 > /net/fantasia/home/atks/makefile_tutorial/17.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/17.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/18.OK:
 +
srun echo 18 > /net/fantasia/home/atks/makefile_tutorial/18.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/18.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/19.OK:
 +
srun echo 19 > /net/fantasia/home/atks/makefile_tutorial/19.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/19.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/20.OK:
 +
srun echo 20 > /net/fantasia/home/atks/makefile_tutorial/20.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/20.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/21.OK:
 +
srun echo 21 > /net/fantasia/home/atks/makefile_tutorial/21.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/21.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/22.OK:
 +
srun echo 22 > /net/fantasia/home/atks/makefile_tutorial/22.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/22.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/23.OK:
 +
srun echo 23 > /net/fantasia/home/atks/makefile_tutorial/23.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/23.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/24.OK:
 +
srun echo 24 > /net/fantasia/home/atks/makefile_tutorial/24.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/24.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/25.OK:
 +
srun echo 25 > /net/fantasia/home/atks/makefile_tutorial/25.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/25.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/26.OK:
 +
srun echo 26 > /net/fantasia/home/atks/makefile_tutorial/26.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/26.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/27.OK:
 +
srun echo 27 > /net/fantasia/home/atks/makefile_tutorial/27.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/27.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/28.OK:
 +
srun echo 28 > /net/fantasia/home/atks/makefile_tutorial/28.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/28.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/29.OK:
 +
srun echo 29 > /net/fantasia/home/atks/makefile_tutorial/29.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/29.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/30.OK:
 +
srun echo 30 > /net/fantasia/home/atks/makefile_tutorial/30.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/30.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/31.OK:
 +
srun echo 31 > /net/fantasia/home/atks/makefile_tutorial/31.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/31.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/32.OK:
 +
srun echo 32 > /net/fantasia/home/atks/makefile_tutorial/32.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/32.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/33.OK:
 +
srun echo 33 > /net/fantasia/home/atks/makefile_tutorial/33.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/33.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/34.OK:
 +
srun echo 34 > /net/fantasia/home/atks/makefile_tutorial/34.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/34.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/35.OK:
 +
srun echo 35 > /net/fantasia/home/atks/makefile_tutorial/35.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/35.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/36.OK:
 +
srun echo 36 > /net/fantasia/home/atks/makefile_tutorial/36.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/36.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/37.OK:
 +
srun echo 37 > /net/fantasia/home/atks/makefile_tutorial/37.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/37.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/38.OK:
 +
srun echo 38 > /net/fantasia/home/atks/makefile_tutorial/38.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/38.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/39.OK:
 +
srun echo 39 > /net/fantasia/home/atks/makefile_tutorial/39.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/39.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/40.OK:
 +
srun echo 40 > /net/fantasia/home/atks/makefile_tutorial/40.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/40.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/41.OK:
 +
srun echo 41 > /net/fantasia/home/atks/makefile_tutorial/41.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/41.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/42.OK:
 +
srun echo 42 > /net/fantasia/home/atks/makefile_tutorial/42.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/42.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/43.OK:
 +
srun echo 43 > /net/fantasia/home/atks/makefile_tutorial/43.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/43.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/44.OK:
 +
srun echo 44 > /net/fantasia/home/atks/makefile_tutorial/44.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/44.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/45.OK:
 +
srun echo 45 > /net/fantasia/home/atks/makefile_tutorial/45.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/45.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/46.OK:
 +
srun echo 46 > /net/fantasia/home/atks/makefile_tutorial/46.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/46.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/47.OK:
 +
srun echo 47 > /net/fantasia/home/atks/makefile_tutorial/47.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/47.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/48.OK:
 +
srun echo 48 > /net/fantasia/home/atks/makefile_tutorial/48.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/48.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/49.OK:
 +
srun echo 49 > /net/fantasia/home/atks/makefile_tutorial/49.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/49.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/50.OK:
 +
srun echo 50 > /net/fantasia/home/atks/makefile_tutorial/50.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/50.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/51.OK:
 +
srun echo 51 > /net/fantasia/home/atks/makefile_tutorial/51.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/51.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/52.OK:
 +
srun echo 52 > /net/fantasia/home/atks/makefile_tutorial/52.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/52.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/53.OK:
 +
srun echo 53 > /net/fantasia/home/atks/makefile_tutorial/53.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/53.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/54.OK:
 +
srun echo 54 > /net/fantasia/home/atks/makefile_tutorial/54.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/54.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/55.OK:
 +
srun echo 55 > /net/fantasia/home/atks/makefile_tutorial/55.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/55.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/56.OK:
 +
srun echo 56 > /net/fantasia/home/atks/makefile_tutorial/56.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/56.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/57.OK:
 +
srun echo 57 > /net/fantasia/home/atks/makefile_tutorial/57.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/57.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/58.OK:
 +
srun echo 58 > /net/fantasia/home/atks/makefile_tutorial/58.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/58.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/59.OK:
 +
srun echo 59 > /net/fantasia/home/atks/makefile_tutorial/59.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/59.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/60.OK:
 +
srun echo 60 > /net/fantasia/home/atks/makefile_tutorial/60.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/60.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/61.OK:
 +
srun echo 61 > /net/fantasia/home/atks/makefile_tutorial/61.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/61.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/62.OK:
 +
srun echo 62 > /net/fantasia/home/atks/makefile_tutorial/62.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/62.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/63.OK:
 +
srun echo 63 > /net/fantasia/home/atks/makefile_tutorial/63.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/63.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/64.OK:
 +
srun echo 64 > /net/fantasia/home/atks/makefile_tutorial/64.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/64.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/65.OK:
 +
srun echo 65 > /net/fantasia/home/atks/makefile_tutorial/65.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/65.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/66.OK:
 +
srun echo 66 > /net/fantasia/home/atks/makefile_tutorial/66.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/66.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/67.OK:
 +
srun echo 67 > /net/fantasia/home/atks/makefile_tutorial/67.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/67.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/68.OK:
 +
srun echo 68 > /net/fantasia/home/atks/makefile_tutorial/68.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/68.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/69.OK:
 +
srun echo 69 > /net/fantasia/home/atks/makefile_tutorial/69.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/69.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/70.OK:
 +
srun echo 70 > /net/fantasia/home/atks/makefile_tutorial/70.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/70.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/71.OK:
 +
srun echo 71 > /net/fantasia/home/atks/makefile_tutorial/71.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/71.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/72.OK:
 +
srun echo 72 > /net/fantasia/home/atks/makefile_tutorial/72.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/72.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/73.OK:
 +
srun echo 73 > /net/fantasia/home/atks/makefile_tutorial/73.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/73.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/74.OK:
 +
srun echo 74 > /net/fantasia/home/atks/makefile_tutorial/74.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/74.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/75.OK:
 +
srun echo 75 > /net/fantasia/home/atks/makefile_tutorial/75.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/75.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/76.OK:
 +
srun echo 76 > /net/fantasia/home/atks/makefile_tutorial/76.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/76.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/77.OK:
 +
srun echo 77 > /net/fantasia/home/atks/makefile_tutorial/77.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/77.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/78.OK:
 +
srun echo 78 > /net/fantasia/home/atks/makefile_tutorial/78.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/78.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/79.OK:
 +
srun echo 79 > /net/fantasia/home/atks/makefile_tutorial/79.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/79.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/80.OK:
 +
srun echo 80 > /net/fantasia/home/atks/makefile_tutorial/80.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/80.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/81.OK:
 +
srun echo 81 > /net/fantasia/home/atks/makefile_tutorial/81.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/81.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/82.OK:
 +
srun echo 82 > /net/fantasia/home/atks/makefile_tutorial/82.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/82.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/83.OK:
 +
srun echo 83 > /net/fantasia/home/atks/makefile_tutorial/83.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/83.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/84.OK:
 +
srun echo 84 > /net/fantasia/home/atks/makefile_tutorial/84.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/84.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/85.OK:
 +
srun echo 85 > /net/fantasia/home/atks/makefile_tutorial/85.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/85.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/86.OK:
 +
srun echo 86 > /net/fantasia/home/atks/makefile_tutorial/86.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/86.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/87.OK:
 +
srun echo 87 > /net/fantasia/home/atks/makefile_tutorial/87.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/87.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/88.OK:
 +
srun echo 88 > /net/fantasia/home/atks/makefile_tutorial/88.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/88.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/89.OK:
 +
srun echo 89 > /net/fantasia/home/atks/makefile_tutorial/89.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/89.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/90.OK:
 +
srun echo 90 > /net/fantasia/home/atks/makefile_tutorial/90.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/90.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/91.OK:
 +
srun echo 91 > /net/fantasia/home/atks/makefile_tutorial/91.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/91.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/92.OK:
 +
srun echo 92 > /net/fantasia/home/atks/makefile_tutorial/92.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/92.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/93.OK:
 +
srun echo 93 > /net/fantasia/home/atks/makefile_tutorial/93.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/93.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/94.OK:
 +
srun echo 94 > /net/fantasia/home/atks/makefile_tutorial/94.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/94.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/95.OK:
 +
srun echo 95 > /net/fantasia/home/atks/makefile_tutorial/95.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/95.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/96.OK:
 +
srun echo 96 > /net/fantasia/home/atks/makefile_tutorial/96.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/96.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/97.OK:
 +
srun echo 97 > /net/fantasia/home/atks/makefile_tutorial/97.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/97.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/98.OK:
 +
srun echo 98 > /net/fantasia/home/atks/makefile_tutorial/98.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/98.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/99.OK:
 +
srun echo 99 > /net/fantasia/home/atks/makefile_tutorial/99.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/99.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/100.OK:
 +
srun echo 100 > /net/fantasia/home/atks/makefile_tutorial/100.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/100.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/all.log.OK:  /net/fantasia/home/atks/makefile_tutorial/1.OK /net/fantasia/home/atks/makefile_tutorial/2.OK /net/fantasia/home/atks/makefile_tutorial/3.OK /net/fantasia/home/atks/makefile_tutorial/4.OK /net/fantasia/home/atks/makefile_tutorial/5.OK /net/fantasia/home/atks/makefile_tutorial/6.OK /net/fantasia/home/atks/makefile_tutorial/7.OK /net/fantasia/home/atks/makefile_tutorial/8.OK /net/fantasia/home/atks/makefile_tutorial/9.OK /net/fantasia/home/atks/makefile_tutorial/10.OK /net/fantasia/home/atks/makefile_tutorial/11.OK /net/fantasia/home/atks/makefile_tutorial/12.OK /net/fantasia/home/atks/makefile_tutorial/13.OK /net/fantasia/home/atks/makefile_tutorial/14.OK /net/fantasia/home/atks/makefile_tutorial/15.OK /net/fantasia/home/atks/makefile_tutorial/16.OK /net/fantasia/home/atks/makefile_tutorial/17.OK /net/fantasia/home/atks/makefile_tutorial/18.OK /net/fantasia/home/atks/makefile_tutorial/19.OK /net/fantasia/home/atks/makefile_tutorial/20.OK /net/fantasia/home/atks/makefile_tutorial/21.OK /net/fantasia/home/atks/makefile_tutorial/22.OK /net/fantasia/home/atks/makefile_tutorial/23.OK /net/fantasia/home/atks/makefile_tutorial/24.OK /net/fantasia/home/atks/makefile_tutorial/25.OK /net/fantasia/home/atks/makefile_tutorial/26.OK /net/fantasia/home/atks/makefile_tutorial/27.OK /net/fantasia/home/atks/makefile_tutorial/28.OK /net/fantasia/home/atks/makefile_tutorial/29.OK /net/fantasia/home/atks/makefile_tutorial/30.OK /net/fantasia/home/atks/makefile_tutorial/31.OK /net/fantasia/home/atks/makefile_tutorial/32.OK /net/fantasia/home/atks/makefile_tutorial/33.OK /net/fantasia/home/atks/makefile_tutorial/34.OK /net/fantasia/home/atks/makefile_tutorial/35.OK /net/fantasia/home/atks/makefile_tutorial/36.OK /net/fantasia/home/atks/makefile_tutorial/37.OK /net/fantasia/home/atks/makefile_tutorial/38.OK /net/fantasia/home/atks/makefile_tutorial/39.OK /net/fantasia/home/atks/makefile_tutorial/40.OK /net/fantasia/home/atks/makefile_tutorial/41.OK /net/fantasia/home/atks/makefile_tutorial/42.OK /net/fantasia/home/atks/makefile_tutorial/43.OK /net/fantasia/home/atks/makefile_tutorial/44.OK /net/fantasia/home/atks/makefile_tutorial/45.OK /net/fantasia/home/atks/makefile_tutorial/46.OK /net/fantasia/home/atks/makefile_tutorial/47.OK /net/fantasia/home/atks/makefile_tutorial/48.OK /net/fantasia/home/atks/makefile_tutorial/49.OK /net/fantasia/home/atks/makefile_tutorial/50.OK /net/fantasia/home/atks/makefile_tutorial/51.OK /net/fantasia/home/atks/makefile_tutorial/52.OK /net/fantasia/home/atks/makefile_tutorial/53.OK /net/fantasia/home/atks/makefile_tutorial/54.OK /net/fantasia/home/atks/makefile_tutorial/55.OK /net/fantasia/home/atks/makefile_tutorial/56.OK /net/fantasia/home/atks/makefile_tutorial/57.OK /net/fantasia/home/atks/makefile_tutorial/58.OK /net/fantasia/home/atks/makefile_tutorial/59.OK /net/fantasia/home/atks/makefile_tutorial/60.OK /net/fantasia/home/atks/makefile_tutorial/61.OK /net/fantasia/home/atks/makefile_tutorial/62.OK /net/fantasia/home/atks/makefile_tutorial/63.OK /net/fantasia/home/atks/makefile_tutorial/64.OK /net/fantasia/home/atks/makefile_tutorial/65.OK /net/fantasia/home/atks/makefile_tutorial/66.OK /net/fantasia/home/atks/makefile_tutorial/67.OK /net/fantasia/home/atks/makefile_tutorial/68.OK /net/fantasia/home/atks/makefile_tutorial/69.OK /net/fantasia/home/atks/makefile_tutorial/70.OK /net/fantasia/home/atks/makefile_tutorial/71.OK /net/fantasia/home/atks/makefile_tutorial/72.OK /net/fantasia/home/atks/makefile_tutorial/73.OK /net/fantasia/home/atks/makefile_tutorial/74.OK /net/fantasia/home/atks/makefile_tutorial/75.OK /net/fantasia/home/atks/makefile_tutorial/76.OK /net/fantasia/home/atks/makefile_tutorial/77.OK /net/fantasia/home/atks/makefile_tutorial/78.OK /net/fantasia/home/atks/makefile_tutorial/79.OK /net/fantasia/home/atks/makefile_tutorial/80.OK /net/fantasia/home/atks/makefile_tutorial/81.OK /net/fantasia/home/atks/makefile_tutorial/82.OK /net/fantasia/home/atks/makefile_tutorial/83.OK /net/fantasia/home/atks/makefile_tutorial/84.OK /net/fantasia/home/atks/makefile_tutorial/85.OK /net/fantasia/home/atks/makefile_tutorial/86.OK /net/fantasia/home/atks/makefile_tutorial/87.OK /net/fantasia/home/atks/makefile_tutorial/88.OK /net/fantasia/home/atks/makefile_tutorial/89.OK /net/fantasia/home/atks/makefile_tutorial/90.OK /net/fantasia/home/atks/makefile_tutorial/91.OK /net/fantasia/home/atks/makefile_tutorial/92.OK /net/fantasia/home/atks/makefile_tutorial/93.OK /net/fantasia/home/atks/makefile_tutorial/94.OK /net/fantasia/home/atks/makefile_tutorial/95.OK /net/fantasia/home/atks/makefile_tutorial/96.OK /net/fantasia/home/atks/makefile_tutorial/97.OK /net/fantasia/home/atks/makefile_tutorial/98.OK /net/fantasia/home/atks/makefile_tutorial/99.OK /net/fantasia/home/atks/makefile_tutorial/100.OK
 +
srun cat  /net/fantasia/home/atks/makefile_tutorial/1.log /net/fantasia/home/atks/makefile_tutorial/2.log /net/fantasia/home/atks/makefile_tutorial/3.log /net/fantasia/home/atks/makefile_tutorial/4.log /net/fantasia/home/atks/makefile_tutorial/5.log /net/fantasia/home/atks/makefile_tutorial/6.log /net/fantasia/home/atks/makefile_tutorial/7.log /net/fantasia/home/atks/makefile_tutorial/8.log /net/fantasia/home/atks/makefile_tutorial/9.log /net/fantasia/home/atks/makefile_tutorial/10.log /net/fantasia/home/atks/makefile_tutorial/11.log /net/fantasia/home/atks/makefile_tutorial/12.log /net/fantasia/home/atks/makefile_tutorial/13.log /net/fantasia/home/atks/makefile_tutorial/14.log /net/fantasia/home/atks/makefile_tutorial/15.log /net/fantasia/home/atks/makefile_tutorial/16.log /net/fantasia/home/atks/makefile_tutorial/17.log /net/fantasia/home/atks/makefile_tutorial/18.log /net/fantasia/home/atks/makefile_tutorial/19.log /net/fantasia/home/atks/makefile_tutorial/20.log /net/fantasia/home/atks/makefile_tutorial/21.log /net/fantasia/home/atks/makefile_tutorial/22.log /net/fantasia/home/atks/makefile_tutorial/23.log /net/fantasia/home/atks/makefile_tutorial/24.log /net/fantasia/home/atks/makefile_tutorial/25.log /net/fantasia/home/atks/makefile_tutorial/26.log /net/fantasia/home/atks/makefile_tutorial/27.log /net/fantasia/home/atks/makefile_tutorial/28.log /net/fantasia/home/atks/makefile_tutorial/29.log /net/fantasia/home/atks/makefile_tutorial/30.log /net/fantasia/home/atks/makefile_tutorial/31.log /net/fantasia/home/atks/makefile_tutorial/32.log /net/fantasia/home/atks/makefile_tutorial/33.log /net/fantasia/home/atks/makefile_tutorial/34.log /net/fantasia/home/atks/makefile_tutorial/35.log /net/fantasia/home/atks/makefile_tutorial/36.log /net/fantasia/home/atks/makefile_tutorial/37.log /net/fantasia/home/atks/makefile_tutorial/38.log /net/fantasia/home/atks/makefile_tutorial/39.log /net/fantasia/home/atks/makefile_tutorial/40.log /net/fantasia/home/atks/makefile_tutorial/41.log /net/fantasia/home/atks/makefile_tutorial/42.log /net/fantasia/home/atks/makefile_tutorial/43.log /net/fantasia/home/atks/makefile_tutorial/44.log /net/fantasia/home/atks/makefile_tutorial/45.log /net/fantasia/home/atks/makefile_tutorial/46.log /net/fantasia/home/atks/makefile_tutorial/47.log /net/fantasia/home/atks/makefile_tutorial/48.log /net/fantasia/home/atks/makefile_tutorial/49.log /net/fantasia/home/atks/makefile_tutorial/50.log /net/fantasia/home/atks/makefile_tutorial/51.log /net/fantasia/home/atks/makefile_tutorial/52.log /net/fantasia/home/atks/makefile_tutorial/53.log /net/fantasia/home/atks/makefile_tutorial/54.log /net/fantasia/home/atks/makefile_tutorial/55.log /net/fantasia/home/atks/makefile_tutorial/56.log /net/fantasia/home/atks/makefile_tutorial/57.log /net/fantasia/home/atks/makefile_tutorial/58.log /net/fantasia/home/atks/makefile_tutorial/59.log /net/fantasia/home/atks/makefile_tutorial/60.log /net/fantasia/home/atks/makefile_tutorial/61.log /net/fantasia/home/atks/makefile_tutorial/62.log /net/fantasia/home/atks/makefile_tutorial/63.log /net/fantasia/home/atks/makefile_tutorial/64.log /net/fantasia/home/atks/makefile_tutorial/65.log /net/fantasia/home/atks/makefile_tutorial/66.log /net/fantasia/home/atks/makefile_tutorial/67.log /net/fantasia/home/atks/makefile_tutorial/68.log /net/fantasia/home/atks/makefile_tutorial/69.log /net/fantasia/home/atks/makefile_tutorial/70.log /net/fantasia/home/atks/makefile_tutorial/71.log /net/fantasia/home/atks/makefile_tutorial/72.log /net/fantasia/home/atks/makefile_tutorial/73.log /net/fantasia/home/atks/makefile_tutorial/74.log /net/fantasia/home/atks/makefile_tutorial/75.log /net/fantasia/home/atks/makefile_tutorial/76.log /net/fantasia/home/atks/makefile_tutorial/77.log /net/fantasia/home/atks/makefile_tutorial/78.log /net/fantasia/home/atks/makefile_tutorial/79.log /net/fantasia/home/atks/makefile_tutorial/80.log /net/fantasia/home/atks/makefile_tutorial/81.log /net/fantasia/home/atks/makefile_tutorial/82.log /net/fantasia/home/atks/makefile_tutorial/83.log /net/fantasia/home/atks/makefile_tutorial/84.log /net/fantasia/home/atks/makefile_tutorial/85.log /net/fantasia/home/atks/makefile_tutorial/86.log /net/fantasia/home/atks/makefile_tutorial/87.log /net/fantasia/home/atks/makefile_tutorial/88.log /net/fantasia/home/atks/makefile_tutorial/89.log /net/fantasia/home/atks/makefile_tutorial/90.log /net/fantasia/home/atks/makefile_tutorial/91.log /net/fantasia/home/atks/makefile_tutorial/92.log /net/fantasia/home/atks/makefile_tutorial/93.log /net/fantasia/home/atks/makefile_tutorial/94.log /net/fantasia/home/atks/makefile_tutorial/95.log /net/fantasia/home/atks/makefile_tutorial/96.log /net/fantasia/home/atks/makefile_tutorial/97.log /net/fantasia/home/atks/makefile_tutorial/98.log /net/fantasia/home/atks/makefile_tutorial/99.log /net/fantasia/home/atks/makefile_tutorial/100.log > /net/fantasia/home/atks/makefile_tutorial/all.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/all.log.OK
 +
 
 +
/net/fantasia/home/atks/makefile_tutorial/cleaned.OK: /net/fantasia/home/atks/makefile_tutorial/all.log.OK
 +
srun rm  /net/fantasia/home/atks/makefile_tutorial/1.log /net/fantasia/home/atks/makefile_tutorial/2.log /net/fantasia/home/atks/makefile_tutorial/3.log /net/fantasia/home/atks/makefile_tutorial/4.log /net/fantasia/home/atks/makefile_tutorial/5.log /net/fantasia/home/atks/makefile_tutorial/6.log /net/fantasia/home/atks/makefile_tutorial/7.log /net/fantasia/home/atks/makefile_tutorial/8.log /net/fantasia/home/atks/makefile_tutorial/9.log /net/fantasia/home/atks/makefile_tutorial/10.log /net/fantasia/home/atks/makefile_tutorial/11.log /net/fantasia/home/atks/makefile_tutorial/12.log /net/fantasia/home/atks/makefile_tutorial/13.log /net/fantasia/home/atks/makefile_tutorial/14.log /net/fantasia/home/atks/makefile_tutorial/15.log /net/fantasia/home/atks/makefile_tutorial/16.log /net/fantasia/home/atks/makefile_tutorial/17.log /net/fantasia/home/atks/makefile_tutorial/18.log /net/fantasia/home/atks/makefile_tutorial/19.log /net/fantasia/home/atks/makefile_tutorial/20.log /net/fantasia/home/atks/makefile_tutorial/21.log /net/fantasia/home/atks/makefile_tutorial/22.log /net/fantasia/home/atks/makefile_tutorial/23.log /net/fantasia/home/atks/makefile_tutorial/24.log /net/fantasia/home/atks/makefile_tutorial/25.log /net/fantasia/home/atks/makefile_tutorial/26.log /net/fantasia/home/atks/makefile_tutorial/27.log /net/fantasia/home/atks/makefile_tutorial/28.log /net/fantasia/home/atks/makefile_tutorial/29.log /net/fantasia/home/atks/makefile_tutorial/30.log /net/fantasia/home/atks/makefile_tutorial/31.log /net/fantasia/home/atks/makefile_tutorial/32.log /net/fantasia/home/atks/makefile_tutorial/33.log /net/fantasia/home/atks/makefile_tutorial/34.log /net/fantasia/home/atks/makefile_tutorial/35.log /net/fantasia/home/atks/makefile_tutorial/36.log /net/fantasia/home/atks/makefile_tutorial/37.log /net/fantasia/home/atks/makefile_tutorial/38.log /net/fantasia/home/atks/makefile_tutorial/39.log /net/fantasia/home/atks/makefile_tutorial/40.log /net/fantasia/home/atks/makefile_tutorial/41.log /net/fantasia/home/atks/makefile_tutorial/42.log /net/fantasia/home/atks/makefile_tutorial/43.log /net/fantasia/home/atks/makefile_tutorial/44.log /net/fantasia/home/atks/makefile_tutorial/45.log /net/fantasia/home/atks/makefile_tutorial/46.log /net/fantasia/home/atks/makefile_tutorial/47.log /net/fantasia/home/atks/makefile_tutorial/48.log /net/fantasia/home/atks/makefile_tutorial/49.log /net/fantasia/home/atks/makefile_tutorial/50.log /net/fantasia/home/atks/makefile_tutorial/51.log /net/fantasia/home/atks/makefile_tutorial/52.log /net/fantasia/home/atks/makefile_tutorial/53.log /net/fantasia/home/atks/makefile_tutorial/54.log /net/fantasia/home/atks/makefile_tutorial/55.log /net/fantasia/home/atks/makefile_tutorial/56.log /net/fantasia/home/atks/makefile_tutorial/57.log /net/fantasia/home/atks/makefile_tutorial/58.log /net/fantasia/home/atks/makefile_tutorial/59.log /net/fantasia/home/atks/makefile_tutorial/60.log /net/fantasia/home/atks/makefile_tutorial/61.log /net/fantasia/home/atks/makefile_tutorial/62.log /net/fantasia/home/atks/makefile_tutorial/63.log /net/fantasia/home/atks/makefile_tutorial/64.log /net/fantasia/home/atks/makefile_tutorial/65.log /net/fantasia/home/atks/makefile_tutorial/66.log /net/fantasia/home/atks/makefile_tutorial/67.log /net/fantasia/home/atks/makefile_tutorial/68.log /net/fantasia/home/atks/makefile_tutorial/69.log /net/fantasia/home/atks/makefile_tutorial/70.log /net/fantasia/home/atks/makefile_tutorial/71.log /net/fantasia/home/atks/makefile_tutorial/72.log /net/fantasia/home/atks/makefile_tutorial/73.log /net/fantasia/home/atks/makefile_tutorial/74.log /net/fantasia/home/atks/makefile_tutorial/75.log /net/fantasia/home/atks/makefile_tutorial/76.log /net/fantasia/home/atks/makefile_tutorial/77.log /net/fantasia/home/atks/makefile_tutorial/78.log /net/fantasia/home/atks/makefile_tutorial/79.log /net/fantasia/home/atks/makefile_tutorial/80.log /net/fantasia/home/atks/makefile_tutorial/81.log /net/fantasia/home/atks/makefile_tutorial/82.log /net/fantasia/home/atks/makefile_tutorial/83.log /net/fantasia/home/atks/makefile_tutorial/84.log /net/fantasia/home/atks/makefile_tutorial/85.log /net/fantasia/home/atks/makefile_tutorial/86.log /net/fantasia/home/atks/makefile_tutorial/87.log /net/fantasia/home/atks/makefile_tutorial/88.log /net/fantasia/home/atks/makefile_tutorial/89.log /net/fantasia/home/atks/makefile_tutorial/90.log /net/fantasia/home/atks/makefile_tutorial/91.log /net/fantasia/home/atks/makefile_tutorial/92.log /net/fantasia/home/atks/makefile_tutorial/93.log /net/fantasia/home/atks/makefile_tutorial/94.log /net/fantasia/home/atks/makefile_tutorial/95.log /net/fantasia/home/atks/makefile_tutorial/96.log /net/fantasia/home/atks/makefile_tutorial/97.log /net/fantasia/home/atks/makefile_tutorial/98.log /net/fantasia/home/atks/makefile_tutorial/99.log /net/fantasia/home/atks/makefile_tutorial/100.log
 +
touch /net/fantasia/home/atks/makefile_tutorial/cleaned.OK
 +
 
 +
clean:
 +
-rm -rf /net/fantasia/home/atks/makefile_tutorial/*.OK /net/fantasia/home/atks/makefile_tutorial/*.log
 +
</source>
 +
 
 +
= Similar articles =
 +
 
 +
[http://kbroman.org/Tools4RR/pages/schedule.html Tools for reproducible research] <br>
 +
[http://bost.ocks.org/mike/make/ Why use make?] <br>
 +
[http://stackoverflow.com/questions/395234/any-interesting-uses-of-makefiles-to-share Any interesting uses of makefiles to share?] <br>
 +
[https://www.biostars.org/p/79/ How To Organize A Pipeline Of Small Scripts Together?]
 +
 
 +
= Acknowledgement =
 +
 
 +
Thanks to Hyun for introducing this trick.
 +
 
 +
= Maintained by =
  
Makefiles themselves are not that readable if there are many dependencies. We can use a script
+
This page is maintained by  [mailto:atks@umich.edu Adrian].
where we can express the analysis pipeline more easily and use it to generate a Makefile.
 

Latest revision as of 21:00, 14 July 2021

Introduction

GNU Make is often thought of as a tool for managing the compilation of large C programs. This is true, but its potential is not limited to this!

At its core, it is a generic pipelining framework that is aware of dependencies and can run steps in parallel.

Statistical genetics analyses (or any big data analyses in general) often requires multiple steps to prepare the data, running computationally expensive analyses, and then collating the data.

Make can instead of simply compiling codes, may also execute the steps in your analyses.

Make allows you to redo part of your analyses and rerun only the parts which are affected by the change.

Using Make potentially save you lots of time and hair pulling especially when your supervisor asks for ALL the analyses again but this time only with rare variants.

Using a script to generate a make file allows you to document the steps required in the analysis too and makes it easier in the future when the analysis is revisited.

Basic Idea

 The general format of a make file is as follows:
 <target> : <dependency> ...
      <command 1>
      <command 2>
 
 The target is usually a small file that is created using "touch <target>".  
 It can be considered as a text and in this case, it is referred via "make <target>"
 
 The dependency(ies) are files.

 The commands are single line commands in linux.  
 The last command is the touch command usually.  
 This allows the creation of a file to signify that the prior commands were executed successfully.
 
 A perl script is written to generate the make file,  in this script, you may document the analyses and 
 allow options to customize the variables in your analyses.
 Once the make file is generated, you can run it with make using the -j option for parallelization.
 If a part of the analyses has to be re performed, simply delete the relevant target file, make will
 rerun the analyses and redo steps that occur after that particular step.  
 Some other useful options in Make are -k for running the analyses as far as possible without 
 terminating the entire pipeline and -t for generating all the target files chronologically.
 For commands that involves a series of pipes, you can use "set pipefail" in a bash environment
 to ensure that the an error is returned if any stage of the pipe fails.  If this is not done, the return
 code of the last process in the pipe will be returned and Make will think that this series of commands
 has completed successfully.

Example

This example does the following:

  1. generate 100 log files with a number written to it
  2. concatenate the 100 log files into one file
  3. delete the 100 log files

The example files may be found in /net/fantasia/home/atks/makefile_tutorial

 #generate make file using perl script
 ./generate_simple_stuff
 #generate make file using perl script to launch jobs on slurm
 ./generate_simple_stuff -l slurm
 #generate make file using perl script to launch jobs on slurm
 #files are stored in <dir> which must be described as an absolute path
 ./generate_simple_stuff -l slurm -o <dir>
 #run make file sequentially
 make -f simple_stuff.mk
 #run make file in parallel to at most 100 jobs
 make -f simple_stuff.mk -j 100
 #clear files from run
 make -f simple_stuff.mk clean

Script

#!/usr/bin/perl -w

use warnings;
use strict;
use POSIX;
use Getopt::Long;
use File::Path;
use File::Basename;
use Pod::Usage;

=head1 NAME

generate_simple_stuff_makefile

=head1 SYNOPSIS

 generate_simple_stuff_makefile [options]

  -o     output directory : location of all output files
  -m     output make file

 example: ./generate_simple_stuff_makefile.pl

=head1 DESCRIPTION

=cut

#option variables
my $help;
my $verbose;
my $debug;
my $outputDir = getcwd();
my $makeFile = "simple_stuff.mk";
my $launchMethod = "local";

#initialize options
Getopt::Long::Configure ('bundling');

if(!GetOptions ('h'=>\$help, 'v'=>\$verbose, 'd'=>\$debug,
                'o:s'=>\$outputDir,
                'l:s'=>\$launchMethod,
                'm:s'=>\$makeFile)
  || !defined($outputDir)
  || scalar(@ARGV)!=0)
{
    if ($help)
    {
        pod2usage(-verbose => 2);
    }
    else
    {
        pod2usage(1);
    }
}

if ($launchMethod ne "local" && $launchMethod ne "slurm")
{
    print STDERR "Launch method has to be local or slurm\n";
    exit(1);
}

##############
#print options
##############
printf("Options\n");
printf("\n");
printf("output directory : %s\n", $outputDir);
printf("launch method    : %s\n", $launchMethod);
printf("\n");

my @nodes = ();
for my $i (140..171)
{
    push(@nodes, "$i");
}
my $nodes = join(",", @nodes);

#arrays for storing targets, dependencies and commands
my @tgts = ();
my @deps = ();
my @cmds = ();

#temporary variables
my $tgt;
my $dep;
my @cmd;

mkpath($outputDir);

my $inputFiles = "";
my $inputFilesOK = "";
my $inputFile = "";
my $outputFile = "";

######################
#1. Generate 100 files
######################
for my $i (1..100)
{
    $inputFiles .= " $outputDir/$i.log";
    $inputFilesOK .= " $outputDir/$i.OK";
    $tgt = "$outputDir/$i.OK";
    $dep = "";
    @cmd = ("echo $i > $outputDir/$i.log");
    makeJob($launchMethod, $tgt, $dep, @cmd);
}

#########################
#2. Concatenate 100 files
#########################
$outputFile = "$outputDir/all.log";
$tgt = "$outputFile.OK";
$dep = $inputFilesOK;
@cmd = ("cat $inputFiles > $outputFile");
makeJob($launchMethod, $tgt, $dep, @cmd);

###########################
#3. Cleanup temporary files
###########################
$tgt = "$outputDir/cleaned.OK";
$dep = "$outputDir/all.log.OK";
@cmd = ("rm $inputFiles");
makeJob($launchMethod, $tgt, $dep, @cmd);

#*******************
#Write out make file
#*******************
open(MAK,">$makeFile") || die "Cannot open $makeFile\n";
print MAK ".DELETE_ON_ERROR:\n\n";
print MAK "all: @tgts\n\n";

#clean
push(@tgts, "clean");
push(@deps, "");
push(@cmds, "\t-rm -rf $outputDir/*.OK $outputDir/*.log");

for(my $i=0; $i < @tgts; ++$i)
{
    print MAK "$tgts[$i]: $deps[$i]\n";
    print MAK "$cmds[$i]\n";
}
close MAK;

##########
#functions
##########

#run a job either locally or by slurm
sub makeJob
{
    my ($method, $tgt, $dep, @cmd) = @_;

    if ($method eq "local")
    {
        makeLocalStep($tgt, $dep, @cmd);
    }
    elsif ($method eq "slurm")
    {
        makeSlurm($tgt, $dep, @cmd);
    }
}

#run slurm jobs
sub makeSlurm
{
    my ($tgt, $dep, @cmd) = @_;

    push(@tgts, $tgt);
    push(@deps, $dep);
    my $cmd = "";
    for my $c (@cmd)
    {
        $cmd .= "\tsrun " . $c . "\n";
    }
    $cmd .= "\ttouch $tgt\n";
    push(@cmds, $cmd);
}

#run a local job
sub makeLocalStep
{
    my ($tgt, $dep, @cmd) = @_;

    push(@tgts, $tgt);
    push(@deps, $dep);
    my $cmd = "";
    for my $c (@cmd)
    {
        $cmd .= "\t" . $c . "\n";
    }
    $cmd .= "\ttouch $tgt\n";
    push(@cmds, $cmd);
}


Generated Makefile

.DELETE_ON_ERROR:

all: /net/fantasia/home/atks/makefile_tutorial/1.OK /net/fantasia/home/atks/makefile_tutorial/2.OK /net/fantasia/home/atks/makefile_tutorial/3.OK /net/fantasia/home/atks/makefile_tutorial/4.OK /net/fantasia/home/atks/makefile_tutorial/5.OK /net/fantasia/home/atks/makefile_tutorial/6.OK /net/fantasia/home/atks/makefile_tutorial/7.OK /net/fantasia/home/atks/makefile_tutorial/8.OK /net/fantasia/home/atks/makefile_tutorial/9.OK /net/fantasia/home/atks/makefile_tutorial/10.OK /net/fantasia/home/atks/makefile_tutorial/11.OK /net/fantasia/home/atks/makefile_tutorial/12.OK /net/fantasia/home/atks/makefile_tutorial/13.OK /net/fantasia/home/atks/makefile_tutorial/14.OK /net/fantasia/home/atks/makefile_tutorial/15.OK /net/fantasia/home/atks/makefile_tutorial/16.OK /net/fantasia/home/atks/makefile_tutorial/17.OK /net/fantasia/home/atks/makefile_tutorial/18.OK /net/fantasia/home/atks/makefile_tutorial/19.OK /net/fantasia/home/atks/makefile_tutorial/20.OK /net/fantasia/home/atks/makefile_tutorial/21.OK /net/fantasia/home/atks/makefile_tutorial/22.OK /net/fantasia/home/atks/makefile_tutorial/23.OK /net/fantasia/home/atks/makefile_tutorial/24.OK /net/fantasia/home/atks/makefile_tutorial/25.OK /net/fantasia/home/atks/makefile_tutorial/26.OK /net/fantasia/home/atks/makefile_tutorial/27.OK /net/fantasia/home/atks/makefile_tutorial/28.OK /net/fantasia/home/atks/makefile_tutorial/29.OK /net/fantasia/home/atks/makefile_tutorial/30.OK /net/fantasia/home/atks/makefile_tutorial/31.OK /net/fantasia/home/atks/makefile_tutorial/32.OK /net/fantasia/home/atks/makefile_tutorial/33.OK /net/fantasia/home/atks/makefile_tutorial/34.OK /net/fantasia/home/atks/makefile_tutorial/35.OK /net/fantasia/home/atks/makefile_tutorial/36.OK /net/fantasia/home/atks/makefile_tutorial/37.OK /net/fantasia/home/atks/makefile_tutorial/38.OK /net/fantasia/home/atks/makefile_tutorial/39.OK /net/fantasia/home/atks/makefile_tutorial/40.OK /net/fantasia/home/atks/makefile_tutorial/41.OK /net/fantasia/home/atks/makefile_tutorial/42.OK /net/fantasia/home/atks/makefile_tutorial/43.OK /net/fantasia/home/atks/makefile_tutorial/44.OK /net/fantasia/home/atks/makefile_tutorial/45.OK /net/fantasia/home/atks/makefile_tutorial/46.OK /net/fantasia/home/atks/makefile_tutorial/47.OK /net/fantasia/home/atks/makefile_tutorial/48.OK /net/fantasia/home/atks/makefile_tutorial/49.OK /net/fantasia/home/atks/makefile_tutorial/50.OK /net/fantasia/home/atks/makefile_tutorial/51.OK /net/fantasia/home/atks/makefile_tutorial/52.OK /net/fantasia/home/atks/makefile_tutorial/53.OK /net/fantasia/home/atks/makefile_tutorial/54.OK /net/fantasia/home/atks/makefile_tutorial/55.OK /net/fantasia/home/atks/makefile_tutorial/56.OK /net/fantasia/home/atks/makefile_tutorial/57.OK /net/fantasia/home/atks/makefile_tutorial/58.OK /net/fantasia/home/atks/makefile_tutorial/59.OK /net/fantasia/home/atks/makefile_tutorial/60.OK /net/fantasia/home/atks/makefile_tutorial/61.OK /net/fantasia/home/atks/makefile_tutorial/62.OK /net/fantasia/home/atks/makefile_tutorial/63.OK /net/fantasia/home/atks/makefile_tutorial/64.OK /net/fantasia/home/atks/makefile_tutorial/65.OK /net/fantasia/home/atks/makefile_tutorial/66.OK /net/fantasia/home/atks/makefile_tutorial/67.OK /net/fantasia/home/atks/makefile_tutorial/68.OK /net/fantasia/home/atks/makefile_tutorial/69.OK /net/fantasia/home/atks/makefile_tutorial/70.OK /net/fantasia/home/atks/makefile_tutorial/71.OK /net/fantasia/home/atks/makefile_tutorial/72.OK /net/fantasia/home/atks/makefile_tutorial/73.OK /net/fantasia/home/atks/makefile_tutorial/74.OK /net/fantasia/home/atks/makefile_tutorial/75.OK /net/fantasia/home/atks/makefile_tutorial/76.OK /net/fantasia/home/atks/makefile_tutorial/77.OK /net/fantasia/home/atks/makefile_tutorial/78.OK /net/fantasia/home/atks/makefile_tutorial/79.OK /net/fantasia/home/atks/makefile_tutorial/80.OK /net/fantasia/home/atks/makefile_tutorial/81.OK /net/fantasia/home/atks/makefile_tutorial/82.OK /net/fantasia/home/atks/makefile_tutorial/83.OK /net/fantasia/home/atks/makefile_tutorial/84.OK /net/fantasia/home/atks/makefile_tutorial/85.OK /net/fantasia/home/atks/makefile_tutorial/86.OK /net/fantasia/home/atks/makefile_tutorial/87.OK /net/fantasia/home/atks/makefile_tutorial/88.OK /net/fantasia/home/atks/makefile_tutorial/89.OK /net/fantasia/home/atks/makefile_tutorial/90.OK /net/fantasia/home/atks/makefile_tutorial/91.OK /net/fantasia/home/atks/makefile_tutorial/92.OK /net/fantasia/home/atks/makefile_tutorial/93.OK /net/fantasia/home/atks/makefile_tutorial/94.OK /net/fantasia/home/atks/makefile_tutorial/95.OK /net/fantasia/home/atks/makefile_tutorial/96.OK /net/fantasia/home/atks/makefile_tutorial/97.OK /net/fantasia/home/atks/makefile_tutorial/98.OK /net/fantasia/home/atks/makefile_tutorial/99.OK /net/fantasia/home/atks/makefile_tutorial/100.OK /net/fantasia/home/atks/makefile_tutorial/all.log.OK /net/fantasia/home/atks/makefile_tutorial/cleaned.OK

/net/fantasia/home/atks/makefile_tutorial/1.OK: 
	srun echo 1 > /net/fantasia/home/atks/makefile_tutorial/1.log
	touch /net/fantasia/home/atks/makefile_tutorial/1.OK

/net/fantasia/home/atks/makefile_tutorial/2.OK: 
	srun echo 2 > /net/fantasia/home/atks/makefile_tutorial/2.log
	touch /net/fantasia/home/atks/makefile_tutorial/2.OK

/net/fantasia/home/atks/makefile_tutorial/3.OK: 
	srun echo 3 > /net/fantasia/home/atks/makefile_tutorial/3.log
	touch /net/fantasia/home/atks/makefile_tutorial/3.OK

/net/fantasia/home/atks/makefile_tutorial/4.OK: 
	srun echo 4 > /net/fantasia/home/atks/makefile_tutorial/4.log
	touch /net/fantasia/home/atks/makefile_tutorial/4.OK

/net/fantasia/home/atks/makefile_tutorial/5.OK: 
	srun echo 5 > /net/fantasia/home/atks/makefile_tutorial/5.log
	touch /net/fantasia/home/atks/makefile_tutorial/5.OK

/net/fantasia/home/atks/makefile_tutorial/6.OK: 
	srun echo 6 > /net/fantasia/home/atks/makefile_tutorial/6.log
	touch /net/fantasia/home/atks/makefile_tutorial/6.OK

/net/fantasia/home/atks/makefile_tutorial/7.OK: 
	srun echo 7 > /net/fantasia/home/atks/makefile_tutorial/7.log
	touch /net/fantasia/home/atks/makefile_tutorial/7.OK

/net/fantasia/home/atks/makefile_tutorial/8.OK: 
	srun echo 8 > /net/fantasia/home/atks/makefile_tutorial/8.log
	touch /net/fantasia/home/atks/makefile_tutorial/8.OK

/net/fantasia/home/atks/makefile_tutorial/9.OK: 
	srun echo 9 > /net/fantasia/home/atks/makefile_tutorial/9.log
	touch /net/fantasia/home/atks/makefile_tutorial/9.OK

/net/fantasia/home/atks/makefile_tutorial/10.OK: 
	srun echo 10 > /net/fantasia/home/atks/makefile_tutorial/10.log
	touch /net/fantasia/home/atks/makefile_tutorial/10.OK

/net/fantasia/home/atks/makefile_tutorial/11.OK: 
	srun echo 11 > /net/fantasia/home/atks/makefile_tutorial/11.log
	touch /net/fantasia/home/atks/makefile_tutorial/11.OK

/net/fantasia/home/atks/makefile_tutorial/12.OK: 
	srun echo 12 > /net/fantasia/home/atks/makefile_tutorial/12.log
	touch /net/fantasia/home/atks/makefile_tutorial/12.OK

/net/fantasia/home/atks/makefile_tutorial/13.OK: 
	srun echo 13 > /net/fantasia/home/atks/makefile_tutorial/13.log
	touch /net/fantasia/home/atks/makefile_tutorial/13.OK

/net/fantasia/home/atks/makefile_tutorial/14.OK: 
	srun echo 14 > /net/fantasia/home/atks/makefile_tutorial/14.log
	touch /net/fantasia/home/atks/makefile_tutorial/14.OK

/net/fantasia/home/atks/makefile_tutorial/15.OK: 
	srun echo 15 > /net/fantasia/home/atks/makefile_tutorial/15.log
	touch /net/fantasia/home/atks/makefile_tutorial/15.OK

/net/fantasia/home/atks/makefile_tutorial/16.OK: 
	srun echo 16 > /net/fantasia/home/atks/makefile_tutorial/16.log
	touch /net/fantasia/home/atks/makefile_tutorial/16.OK

/net/fantasia/home/atks/makefile_tutorial/17.OK: 
	srun echo 17 > /net/fantasia/home/atks/makefile_tutorial/17.log
	touch /net/fantasia/home/atks/makefile_tutorial/17.OK

/net/fantasia/home/atks/makefile_tutorial/18.OK: 
	srun echo 18 > /net/fantasia/home/atks/makefile_tutorial/18.log
	touch /net/fantasia/home/atks/makefile_tutorial/18.OK

/net/fantasia/home/atks/makefile_tutorial/19.OK: 
	srun echo 19 > /net/fantasia/home/atks/makefile_tutorial/19.log
	touch /net/fantasia/home/atks/makefile_tutorial/19.OK

/net/fantasia/home/atks/makefile_tutorial/20.OK: 
	srun echo 20 > /net/fantasia/home/atks/makefile_tutorial/20.log
	touch /net/fantasia/home/atks/makefile_tutorial/20.OK

/net/fantasia/home/atks/makefile_tutorial/21.OK: 
	srun echo 21 > /net/fantasia/home/atks/makefile_tutorial/21.log
	touch /net/fantasia/home/atks/makefile_tutorial/21.OK

/net/fantasia/home/atks/makefile_tutorial/22.OK: 
	srun echo 22 > /net/fantasia/home/atks/makefile_tutorial/22.log
	touch /net/fantasia/home/atks/makefile_tutorial/22.OK

/net/fantasia/home/atks/makefile_tutorial/23.OK: 
	srun echo 23 > /net/fantasia/home/atks/makefile_tutorial/23.log
	touch /net/fantasia/home/atks/makefile_tutorial/23.OK

/net/fantasia/home/atks/makefile_tutorial/24.OK: 
	srun echo 24 > /net/fantasia/home/atks/makefile_tutorial/24.log
	touch /net/fantasia/home/atks/makefile_tutorial/24.OK

/net/fantasia/home/atks/makefile_tutorial/25.OK: 
	srun echo 25 > /net/fantasia/home/atks/makefile_tutorial/25.log
	touch /net/fantasia/home/atks/makefile_tutorial/25.OK

/net/fantasia/home/atks/makefile_tutorial/26.OK: 
	srun echo 26 > /net/fantasia/home/atks/makefile_tutorial/26.log
	touch /net/fantasia/home/atks/makefile_tutorial/26.OK

/net/fantasia/home/atks/makefile_tutorial/27.OK: 
	srun echo 27 > /net/fantasia/home/atks/makefile_tutorial/27.log
	touch /net/fantasia/home/atks/makefile_tutorial/27.OK

/net/fantasia/home/atks/makefile_tutorial/28.OK: 
	srun echo 28 > /net/fantasia/home/atks/makefile_tutorial/28.log
	touch /net/fantasia/home/atks/makefile_tutorial/28.OK

/net/fantasia/home/atks/makefile_tutorial/29.OK: 
	srun echo 29 > /net/fantasia/home/atks/makefile_tutorial/29.log
	touch /net/fantasia/home/atks/makefile_tutorial/29.OK

/net/fantasia/home/atks/makefile_tutorial/30.OK: 
	srun echo 30 > /net/fantasia/home/atks/makefile_tutorial/30.log
	touch /net/fantasia/home/atks/makefile_tutorial/30.OK

/net/fantasia/home/atks/makefile_tutorial/31.OK: 
	srun echo 31 > /net/fantasia/home/atks/makefile_tutorial/31.log
	touch /net/fantasia/home/atks/makefile_tutorial/31.OK

/net/fantasia/home/atks/makefile_tutorial/32.OK: 
	srun echo 32 > /net/fantasia/home/atks/makefile_tutorial/32.log
	touch /net/fantasia/home/atks/makefile_tutorial/32.OK

/net/fantasia/home/atks/makefile_tutorial/33.OK: 
	srun echo 33 > /net/fantasia/home/atks/makefile_tutorial/33.log
	touch /net/fantasia/home/atks/makefile_tutorial/33.OK

/net/fantasia/home/atks/makefile_tutorial/34.OK: 
	srun echo 34 > /net/fantasia/home/atks/makefile_tutorial/34.log
	touch /net/fantasia/home/atks/makefile_tutorial/34.OK

/net/fantasia/home/atks/makefile_tutorial/35.OK: 
	srun echo 35 > /net/fantasia/home/atks/makefile_tutorial/35.log
	touch /net/fantasia/home/atks/makefile_tutorial/35.OK

/net/fantasia/home/atks/makefile_tutorial/36.OK: 
	srun echo 36 > /net/fantasia/home/atks/makefile_tutorial/36.log
	touch /net/fantasia/home/atks/makefile_tutorial/36.OK

/net/fantasia/home/atks/makefile_tutorial/37.OK: 
	srun echo 37 > /net/fantasia/home/atks/makefile_tutorial/37.log
	touch /net/fantasia/home/atks/makefile_tutorial/37.OK

/net/fantasia/home/atks/makefile_tutorial/38.OK: 
	srun echo 38 > /net/fantasia/home/atks/makefile_tutorial/38.log
	touch /net/fantasia/home/atks/makefile_tutorial/38.OK

/net/fantasia/home/atks/makefile_tutorial/39.OK: 
	srun echo 39 > /net/fantasia/home/atks/makefile_tutorial/39.log
	touch /net/fantasia/home/atks/makefile_tutorial/39.OK

/net/fantasia/home/atks/makefile_tutorial/40.OK: 
	srun echo 40 > /net/fantasia/home/atks/makefile_tutorial/40.log
	touch /net/fantasia/home/atks/makefile_tutorial/40.OK

/net/fantasia/home/atks/makefile_tutorial/41.OK: 
	srun echo 41 > /net/fantasia/home/atks/makefile_tutorial/41.log
	touch /net/fantasia/home/atks/makefile_tutorial/41.OK

/net/fantasia/home/atks/makefile_tutorial/42.OK: 
	srun echo 42 > /net/fantasia/home/atks/makefile_tutorial/42.log
	touch /net/fantasia/home/atks/makefile_tutorial/42.OK

/net/fantasia/home/atks/makefile_tutorial/43.OK: 
	srun echo 43 > /net/fantasia/home/atks/makefile_tutorial/43.log
	touch /net/fantasia/home/atks/makefile_tutorial/43.OK

/net/fantasia/home/atks/makefile_tutorial/44.OK: 
	srun echo 44 > /net/fantasia/home/atks/makefile_tutorial/44.log
	touch /net/fantasia/home/atks/makefile_tutorial/44.OK

/net/fantasia/home/atks/makefile_tutorial/45.OK: 
	srun echo 45 > /net/fantasia/home/atks/makefile_tutorial/45.log
	touch /net/fantasia/home/atks/makefile_tutorial/45.OK

/net/fantasia/home/atks/makefile_tutorial/46.OK: 
	srun echo 46 > /net/fantasia/home/atks/makefile_tutorial/46.log
	touch /net/fantasia/home/atks/makefile_tutorial/46.OK

/net/fantasia/home/atks/makefile_tutorial/47.OK: 
	srun echo 47 > /net/fantasia/home/atks/makefile_tutorial/47.log
	touch /net/fantasia/home/atks/makefile_tutorial/47.OK

/net/fantasia/home/atks/makefile_tutorial/48.OK: 
	srun echo 48 > /net/fantasia/home/atks/makefile_tutorial/48.log
	touch /net/fantasia/home/atks/makefile_tutorial/48.OK

/net/fantasia/home/atks/makefile_tutorial/49.OK: 
	srun echo 49 > /net/fantasia/home/atks/makefile_tutorial/49.log
	touch /net/fantasia/home/atks/makefile_tutorial/49.OK

/net/fantasia/home/atks/makefile_tutorial/50.OK: 
	srun echo 50 > /net/fantasia/home/atks/makefile_tutorial/50.log
	touch /net/fantasia/home/atks/makefile_tutorial/50.OK

/net/fantasia/home/atks/makefile_tutorial/51.OK: 
	srun echo 51 > /net/fantasia/home/atks/makefile_tutorial/51.log
	touch /net/fantasia/home/atks/makefile_tutorial/51.OK

/net/fantasia/home/atks/makefile_tutorial/52.OK: 
	srun echo 52 > /net/fantasia/home/atks/makefile_tutorial/52.log
	touch /net/fantasia/home/atks/makefile_tutorial/52.OK

/net/fantasia/home/atks/makefile_tutorial/53.OK: 
	srun echo 53 > /net/fantasia/home/atks/makefile_tutorial/53.log
	touch /net/fantasia/home/atks/makefile_tutorial/53.OK

/net/fantasia/home/atks/makefile_tutorial/54.OK: 
	srun echo 54 > /net/fantasia/home/atks/makefile_tutorial/54.log
	touch /net/fantasia/home/atks/makefile_tutorial/54.OK

/net/fantasia/home/atks/makefile_tutorial/55.OK: 
	srun echo 55 > /net/fantasia/home/atks/makefile_tutorial/55.log
	touch /net/fantasia/home/atks/makefile_tutorial/55.OK

/net/fantasia/home/atks/makefile_tutorial/56.OK: 
	srun echo 56 > /net/fantasia/home/atks/makefile_tutorial/56.log
	touch /net/fantasia/home/atks/makefile_tutorial/56.OK

/net/fantasia/home/atks/makefile_tutorial/57.OK: 
	srun echo 57 > /net/fantasia/home/atks/makefile_tutorial/57.log
	touch /net/fantasia/home/atks/makefile_tutorial/57.OK

/net/fantasia/home/atks/makefile_tutorial/58.OK: 
	srun echo 58 > /net/fantasia/home/atks/makefile_tutorial/58.log
	touch /net/fantasia/home/atks/makefile_tutorial/58.OK

/net/fantasia/home/atks/makefile_tutorial/59.OK: 
	srun echo 59 > /net/fantasia/home/atks/makefile_tutorial/59.log
	touch /net/fantasia/home/atks/makefile_tutorial/59.OK

/net/fantasia/home/atks/makefile_tutorial/60.OK: 
	srun echo 60 > /net/fantasia/home/atks/makefile_tutorial/60.log
	touch /net/fantasia/home/atks/makefile_tutorial/60.OK

/net/fantasia/home/atks/makefile_tutorial/61.OK: 
	srun echo 61 > /net/fantasia/home/atks/makefile_tutorial/61.log
	touch /net/fantasia/home/atks/makefile_tutorial/61.OK

/net/fantasia/home/atks/makefile_tutorial/62.OK: 
	srun echo 62 > /net/fantasia/home/atks/makefile_tutorial/62.log
	touch /net/fantasia/home/atks/makefile_tutorial/62.OK

/net/fantasia/home/atks/makefile_tutorial/63.OK: 
	srun echo 63 > /net/fantasia/home/atks/makefile_tutorial/63.log
	touch /net/fantasia/home/atks/makefile_tutorial/63.OK

/net/fantasia/home/atks/makefile_tutorial/64.OK: 
	srun echo 64 > /net/fantasia/home/atks/makefile_tutorial/64.log
	touch /net/fantasia/home/atks/makefile_tutorial/64.OK

/net/fantasia/home/atks/makefile_tutorial/65.OK: 
	srun echo 65 > /net/fantasia/home/atks/makefile_tutorial/65.log
	touch /net/fantasia/home/atks/makefile_tutorial/65.OK

/net/fantasia/home/atks/makefile_tutorial/66.OK: 
	srun echo 66 > /net/fantasia/home/atks/makefile_tutorial/66.log
	touch /net/fantasia/home/atks/makefile_tutorial/66.OK

/net/fantasia/home/atks/makefile_tutorial/67.OK: 
	srun echo 67 > /net/fantasia/home/atks/makefile_tutorial/67.log
	touch /net/fantasia/home/atks/makefile_tutorial/67.OK

/net/fantasia/home/atks/makefile_tutorial/68.OK: 
	srun echo 68 > /net/fantasia/home/atks/makefile_tutorial/68.log
	touch /net/fantasia/home/atks/makefile_tutorial/68.OK

/net/fantasia/home/atks/makefile_tutorial/69.OK: 
	srun echo 69 > /net/fantasia/home/atks/makefile_tutorial/69.log
	touch /net/fantasia/home/atks/makefile_tutorial/69.OK

/net/fantasia/home/atks/makefile_tutorial/70.OK: 
	srun echo 70 > /net/fantasia/home/atks/makefile_tutorial/70.log
	touch /net/fantasia/home/atks/makefile_tutorial/70.OK

/net/fantasia/home/atks/makefile_tutorial/71.OK: 
	srun echo 71 > /net/fantasia/home/atks/makefile_tutorial/71.log
	touch /net/fantasia/home/atks/makefile_tutorial/71.OK

/net/fantasia/home/atks/makefile_tutorial/72.OK: 
	srun echo 72 > /net/fantasia/home/atks/makefile_tutorial/72.log
	touch /net/fantasia/home/atks/makefile_tutorial/72.OK

/net/fantasia/home/atks/makefile_tutorial/73.OK: 
	srun echo 73 > /net/fantasia/home/atks/makefile_tutorial/73.log
	touch /net/fantasia/home/atks/makefile_tutorial/73.OK

/net/fantasia/home/atks/makefile_tutorial/74.OK: 
	srun echo 74 > /net/fantasia/home/atks/makefile_tutorial/74.log
	touch /net/fantasia/home/atks/makefile_tutorial/74.OK

/net/fantasia/home/atks/makefile_tutorial/75.OK: 
	srun echo 75 > /net/fantasia/home/atks/makefile_tutorial/75.log
	touch /net/fantasia/home/atks/makefile_tutorial/75.OK

/net/fantasia/home/atks/makefile_tutorial/76.OK: 
	srun echo 76 > /net/fantasia/home/atks/makefile_tutorial/76.log
	touch /net/fantasia/home/atks/makefile_tutorial/76.OK

/net/fantasia/home/atks/makefile_tutorial/77.OK: 
	srun echo 77 > /net/fantasia/home/atks/makefile_tutorial/77.log
	touch /net/fantasia/home/atks/makefile_tutorial/77.OK

/net/fantasia/home/atks/makefile_tutorial/78.OK: 
	srun echo 78 > /net/fantasia/home/atks/makefile_tutorial/78.log
	touch /net/fantasia/home/atks/makefile_tutorial/78.OK

/net/fantasia/home/atks/makefile_tutorial/79.OK: 
	srun echo 79 > /net/fantasia/home/atks/makefile_tutorial/79.log
	touch /net/fantasia/home/atks/makefile_tutorial/79.OK

/net/fantasia/home/atks/makefile_tutorial/80.OK: 
	srun echo 80 > /net/fantasia/home/atks/makefile_tutorial/80.log
	touch /net/fantasia/home/atks/makefile_tutorial/80.OK

/net/fantasia/home/atks/makefile_tutorial/81.OK: 
	srun echo 81 > /net/fantasia/home/atks/makefile_tutorial/81.log
	touch /net/fantasia/home/atks/makefile_tutorial/81.OK

/net/fantasia/home/atks/makefile_tutorial/82.OK: 
	srun echo 82 > /net/fantasia/home/atks/makefile_tutorial/82.log
	touch /net/fantasia/home/atks/makefile_tutorial/82.OK

/net/fantasia/home/atks/makefile_tutorial/83.OK: 
	srun echo 83 > /net/fantasia/home/atks/makefile_tutorial/83.log
	touch /net/fantasia/home/atks/makefile_tutorial/83.OK

/net/fantasia/home/atks/makefile_tutorial/84.OK: 
	srun echo 84 > /net/fantasia/home/atks/makefile_tutorial/84.log
	touch /net/fantasia/home/atks/makefile_tutorial/84.OK

/net/fantasia/home/atks/makefile_tutorial/85.OK: 
	srun echo 85 > /net/fantasia/home/atks/makefile_tutorial/85.log
	touch /net/fantasia/home/atks/makefile_tutorial/85.OK

/net/fantasia/home/atks/makefile_tutorial/86.OK: 
	srun echo 86 > /net/fantasia/home/atks/makefile_tutorial/86.log
	touch /net/fantasia/home/atks/makefile_tutorial/86.OK

/net/fantasia/home/atks/makefile_tutorial/87.OK: 
	srun echo 87 > /net/fantasia/home/atks/makefile_tutorial/87.log
	touch /net/fantasia/home/atks/makefile_tutorial/87.OK

/net/fantasia/home/atks/makefile_tutorial/88.OK: 
	srun echo 88 > /net/fantasia/home/atks/makefile_tutorial/88.log
	touch /net/fantasia/home/atks/makefile_tutorial/88.OK

/net/fantasia/home/atks/makefile_tutorial/89.OK: 
	srun echo 89 > /net/fantasia/home/atks/makefile_tutorial/89.log
	touch /net/fantasia/home/atks/makefile_tutorial/89.OK

/net/fantasia/home/atks/makefile_tutorial/90.OK: 
	srun echo 90 > /net/fantasia/home/atks/makefile_tutorial/90.log
	touch /net/fantasia/home/atks/makefile_tutorial/90.OK

/net/fantasia/home/atks/makefile_tutorial/91.OK: 
	srun echo 91 > /net/fantasia/home/atks/makefile_tutorial/91.log
	touch /net/fantasia/home/atks/makefile_tutorial/91.OK

/net/fantasia/home/atks/makefile_tutorial/92.OK: 
	srun echo 92 > /net/fantasia/home/atks/makefile_tutorial/92.log
	touch /net/fantasia/home/atks/makefile_tutorial/92.OK

/net/fantasia/home/atks/makefile_tutorial/93.OK: 
	srun echo 93 > /net/fantasia/home/atks/makefile_tutorial/93.log
	touch /net/fantasia/home/atks/makefile_tutorial/93.OK

/net/fantasia/home/atks/makefile_tutorial/94.OK: 
	srun echo 94 > /net/fantasia/home/atks/makefile_tutorial/94.log
	touch /net/fantasia/home/atks/makefile_tutorial/94.OK

/net/fantasia/home/atks/makefile_tutorial/95.OK: 
	srun echo 95 > /net/fantasia/home/atks/makefile_tutorial/95.log
	touch /net/fantasia/home/atks/makefile_tutorial/95.OK

/net/fantasia/home/atks/makefile_tutorial/96.OK: 
	srun echo 96 > /net/fantasia/home/atks/makefile_tutorial/96.log
	touch /net/fantasia/home/atks/makefile_tutorial/96.OK

/net/fantasia/home/atks/makefile_tutorial/97.OK: 
	srun echo 97 > /net/fantasia/home/atks/makefile_tutorial/97.log
	touch /net/fantasia/home/atks/makefile_tutorial/97.OK

/net/fantasia/home/atks/makefile_tutorial/98.OK: 
	srun echo 98 > /net/fantasia/home/atks/makefile_tutorial/98.log
	touch /net/fantasia/home/atks/makefile_tutorial/98.OK

/net/fantasia/home/atks/makefile_tutorial/99.OK: 
	srun echo 99 > /net/fantasia/home/atks/makefile_tutorial/99.log
	touch /net/fantasia/home/atks/makefile_tutorial/99.OK

/net/fantasia/home/atks/makefile_tutorial/100.OK: 
	srun echo 100 > /net/fantasia/home/atks/makefile_tutorial/100.log
	touch /net/fantasia/home/atks/makefile_tutorial/100.OK

/net/fantasia/home/atks/makefile_tutorial/all.log.OK:  /net/fantasia/home/atks/makefile_tutorial/1.OK /net/fantasia/home/atks/makefile_tutorial/2.OK /net/fantasia/home/atks/makefile_tutorial/3.OK /net/fantasia/home/atks/makefile_tutorial/4.OK /net/fantasia/home/atks/makefile_tutorial/5.OK /net/fantasia/home/atks/makefile_tutorial/6.OK /net/fantasia/home/atks/makefile_tutorial/7.OK /net/fantasia/home/atks/makefile_tutorial/8.OK /net/fantasia/home/atks/makefile_tutorial/9.OK /net/fantasia/home/atks/makefile_tutorial/10.OK /net/fantasia/home/atks/makefile_tutorial/11.OK /net/fantasia/home/atks/makefile_tutorial/12.OK /net/fantasia/home/atks/makefile_tutorial/13.OK /net/fantasia/home/atks/makefile_tutorial/14.OK /net/fantasia/home/atks/makefile_tutorial/15.OK /net/fantasia/home/atks/makefile_tutorial/16.OK /net/fantasia/home/atks/makefile_tutorial/17.OK /net/fantasia/home/atks/makefile_tutorial/18.OK /net/fantasia/home/atks/makefile_tutorial/19.OK /net/fantasia/home/atks/makefile_tutorial/20.OK /net/fantasia/home/atks/makefile_tutorial/21.OK /net/fantasia/home/atks/makefile_tutorial/22.OK /net/fantasia/home/atks/makefile_tutorial/23.OK /net/fantasia/home/atks/makefile_tutorial/24.OK /net/fantasia/home/atks/makefile_tutorial/25.OK /net/fantasia/home/atks/makefile_tutorial/26.OK /net/fantasia/home/atks/makefile_tutorial/27.OK /net/fantasia/home/atks/makefile_tutorial/28.OK /net/fantasia/home/atks/makefile_tutorial/29.OK /net/fantasia/home/atks/makefile_tutorial/30.OK /net/fantasia/home/atks/makefile_tutorial/31.OK /net/fantasia/home/atks/makefile_tutorial/32.OK /net/fantasia/home/atks/makefile_tutorial/33.OK /net/fantasia/home/atks/makefile_tutorial/34.OK /net/fantasia/home/atks/makefile_tutorial/35.OK /net/fantasia/home/atks/makefile_tutorial/36.OK /net/fantasia/home/atks/makefile_tutorial/37.OK /net/fantasia/home/atks/makefile_tutorial/38.OK /net/fantasia/home/atks/makefile_tutorial/39.OK /net/fantasia/home/atks/makefile_tutorial/40.OK /net/fantasia/home/atks/makefile_tutorial/41.OK /net/fantasia/home/atks/makefile_tutorial/42.OK /net/fantasia/home/atks/makefile_tutorial/43.OK /net/fantasia/home/atks/makefile_tutorial/44.OK /net/fantasia/home/atks/makefile_tutorial/45.OK /net/fantasia/home/atks/makefile_tutorial/46.OK /net/fantasia/home/atks/makefile_tutorial/47.OK /net/fantasia/home/atks/makefile_tutorial/48.OK /net/fantasia/home/atks/makefile_tutorial/49.OK /net/fantasia/home/atks/makefile_tutorial/50.OK /net/fantasia/home/atks/makefile_tutorial/51.OK /net/fantasia/home/atks/makefile_tutorial/52.OK /net/fantasia/home/atks/makefile_tutorial/53.OK /net/fantasia/home/atks/makefile_tutorial/54.OK /net/fantasia/home/atks/makefile_tutorial/55.OK /net/fantasia/home/atks/makefile_tutorial/56.OK /net/fantasia/home/atks/makefile_tutorial/57.OK /net/fantasia/home/atks/makefile_tutorial/58.OK /net/fantasia/home/atks/makefile_tutorial/59.OK /net/fantasia/home/atks/makefile_tutorial/60.OK /net/fantasia/home/atks/makefile_tutorial/61.OK /net/fantasia/home/atks/makefile_tutorial/62.OK /net/fantasia/home/atks/makefile_tutorial/63.OK /net/fantasia/home/atks/makefile_tutorial/64.OK /net/fantasia/home/atks/makefile_tutorial/65.OK /net/fantasia/home/atks/makefile_tutorial/66.OK /net/fantasia/home/atks/makefile_tutorial/67.OK /net/fantasia/home/atks/makefile_tutorial/68.OK /net/fantasia/home/atks/makefile_tutorial/69.OK /net/fantasia/home/atks/makefile_tutorial/70.OK /net/fantasia/home/atks/makefile_tutorial/71.OK /net/fantasia/home/atks/makefile_tutorial/72.OK /net/fantasia/home/atks/makefile_tutorial/73.OK /net/fantasia/home/atks/makefile_tutorial/74.OK /net/fantasia/home/atks/makefile_tutorial/75.OK /net/fantasia/home/atks/makefile_tutorial/76.OK /net/fantasia/home/atks/makefile_tutorial/77.OK /net/fantasia/home/atks/makefile_tutorial/78.OK /net/fantasia/home/atks/makefile_tutorial/79.OK /net/fantasia/home/atks/makefile_tutorial/80.OK /net/fantasia/home/atks/makefile_tutorial/81.OK /net/fantasia/home/atks/makefile_tutorial/82.OK /net/fantasia/home/atks/makefile_tutorial/83.OK /net/fantasia/home/atks/makefile_tutorial/84.OK /net/fantasia/home/atks/makefile_tutorial/85.OK /net/fantasia/home/atks/makefile_tutorial/86.OK /net/fantasia/home/atks/makefile_tutorial/87.OK /net/fantasia/home/atks/makefile_tutorial/88.OK /net/fantasia/home/atks/makefile_tutorial/89.OK /net/fantasia/home/atks/makefile_tutorial/90.OK /net/fantasia/home/atks/makefile_tutorial/91.OK /net/fantasia/home/atks/makefile_tutorial/92.OK /net/fantasia/home/atks/makefile_tutorial/93.OK /net/fantasia/home/atks/makefile_tutorial/94.OK /net/fantasia/home/atks/makefile_tutorial/95.OK /net/fantasia/home/atks/makefile_tutorial/96.OK /net/fantasia/home/atks/makefile_tutorial/97.OK /net/fantasia/home/atks/makefile_tutorial/98.OK /net/fantasia/home/atks/makefile_tutorial/99.OK /net/fantasia/home/atks/makefile_tutorial/100.OK
	srun cat  /net/fantasia/home/atks/makefile_tutorial/1.log /net/fantasia/home/atks/makefile_tutorial/2.log /net/fantasia/home/atks/makefile_tutorial/3.log /net/fantasia/home/atks/makefile_tutorial/4.log /net/fantasia/home/atks/makefile_tutorial/5.log /net/fantasia/home/atks/makefile_tutorial/6.log /net/fantasia/home/atks/makefile_tutorial/7.log /net/fantasia/home/atks/makefile_tutorial/8.log /net/fantasia/home/atks/makefile_tutorial/9.log /net/fantasia/home/atks/makefile_tutorial/10.log /net/fantasia/home/atks/makefile_tutorial/11.log /net/fantasia/home/atks/makefile_tutorial/12.log /net/fantasia/home/atks/makefile_tutorial/13.log /net/fantasia/home/atks/makefile_tutorial/14.log /net/fantasia/home/atks/makefile_tutorial/15.log /net/fantasia/home/atks/makefile_tutorial/16.log /net/fantasia/home/atks/makefile_tutorial/17.log /net/fantasia/home/atks/makefile_tutorial/18.log /net/fantasia/home/atks/makefile_tutorial/19.log /net/fantasia/home/atks/makefile_tutorial/20.log /net/fantasia/home/atks/makefile_tutorial/21.log /net/fantasia/home/atks/makefile_tutorial/22.log /net/fantasia/home/atks/makefile_tutorial/23.log /net/fantasia/home/atks/makefile_tutorial/24.log /net/fantasia/home/atks/makefile_tutorial/25.log /net/fantasia/home/atks/makefile_tutorial/26.log /net/fantasia/home/atks/makefile_tutorial/27.log /net/fantasia/home/atks/makefile_tutorial/28.log /net/fantasia/home/atks/makefile_tutorial/29.log /net/fantasia/home/atks/makefile_tutorial/30.log /net/fantasia/home/atks/makefile_tutorial/31.log /net/fantasia/home/atks/makefile_tutorial/32.log /net/fantasia/home/atks/makefile_tutorial/33.log /net/fantasia/home/atks/makefile_tutorial/34.log /net/fantasia/home/atks/makefile_tutorial/35.log /net/fantasia/home/atks/makefile_tutorial/36.log /net/fantasia/home/atks/makefile_tutorial/37.log /net/fantasia/home/atks/makefile_tutorial/38.log /net/fantasia/home/atks/makefile_tutorial/39.log /net/fantasia/home/atks/makefile_tutorial/40.log /net/fantasia/home/atks/makefile_tutorial/41.log /net/fantasia/home/atks/makefile_tutorial/42.log /net/fantasia/home/atks/makefile_tutorial/43.log /net/fantasia/home/atks/makefile_tutorial/44.log /net/fantasia/home/atks/makefile_tutorial/45.log /net/fantasia/home/atks/makefile_tutorial/46.log /net/fantasia/home/atks/makefile_tutorial/47.log /net/fantasia/home/atks/makefile_tutorial/48.log /net/fantasia/home/atks/makefile_tutorial/49.log /net/fantasia/home/atks/makefile_tutorial/50.log /net/fantasia/home/atks/makefile_tutorial/51.log /net/fantasia/home/atks/makefile_tutorial/52.log /net/fantasia/home/atks/makefile_tutorial/53.log /net/fantasia/home/atks/makefile_tutorial/54.log /net/fantasia/home/atks/makefile_tutorial/55.log /net/fantasia/home/atks/makefile_tutorial/56.log /net/fantasia/home/atks/makefile_tutorial/57.log /net/fantasia/home/atks/makefile_tutorial/58.log /net/fantasia/home/atks/makefile_tutorial/59.log /net/fantasia/home/atks/makefile_tutorial/60.log /net/fantasia/home/atks/makefile_tutorial/61.log /net/fantasia/home/atks/makefile_tutorial/62.log /net/fantasia/home/atks/makefile_tutorial/63.log /net/fantasia/home/atks/makefile_tutorial/64.log /net/fantasia/home/atks/makefile_tutorial/65.log /net/fantasia/home/atks/makefile_tutorial/66.log /net/fantasia/home/atks/makefile_tutorial/67.log /net/fantasia/home/atks/makefile_tutorial/68.log /net/fantasia/home/atks/makefile_tutorial/69.log /net/fantasia/home/atks/makefile_tutorial/70.log /net/fantasia/home/atks/makefile_tutorial/71.log /net/fantasia/home/atks/makefile_tutorial/72.log /net/fantasia/home/atks/makefile_tutorial/73.log /net/fantasia/home/atks/makefile_tutorial/74.log /net/fantasia/home/atks/makefile_tutorial/75.log /net/fantasia/home/atks/makefile_tutorial/76.log /net/fantasia/home/atks/makefile_tutorial/77.log /net/fantasia/home/atks/makefile_tutorial/78.log /net/fantasia/home/atks/makefile_tutorial/79.log /net/fantasia/home/atks/makefile_tutorial/80.log /net/fantasia/home/atks/makefile_tutorial/81.log /net/fantasia/home/atks/makefile_tutorial/82.log /net/fantasia/home/atks/makefile_tutorial/83.log /net/fantasia/home/atks/makefile_tutorial/84.log /net/fantasia/home/atks/makefile_tutorial/85.log /net/fantasia/home/atks/makefile_tutorial/86.log /net/fantasia/home/atks/makefile_tutorial/87.log /net/fantasia/home/atks/makefile_tutorial/88.log /net/fantasia/home/atks/makefile_tutorial/89.log /net/fantasia/home/atks/makefile_tutorial/90.log /net/fantasia/home/atks/makefile_tutorial/91.log /net/fantasia/home/atks/makefile_tutorial/92.log /net/fantasia/home/atks/makefile_tutorial/93.log /net/fantasia/home/atks/makefile_tutorial/94.log /net/fantasia/home/atks/makefile_tutorial/95.log /net/fantasia/home/atks/makefile_tutorial/96.log /net/fantasia/home/atks/makefile_tutorial/97.log /net/fantasia/home/atks/makefile_tutorial/98.log /net/fantasia/home/atks/makefile_tutorial/99.log /net/fantasia/home/atks/makefile_tutorial/100.log > /net/fantasia/home/atks/makefile_tutorial/all.log
	touch /net/fantasia/home/atks/makefile_tutorial/all.log.OK

/net/fantasia/home/atks/makefile_tutorial/cleaned.OK: /net/fantasia/home/atks/makefile_tutorial/all.log.OK
	srun rm  /net/fantasia/home/atks/makefile_tutorial/1.log /net/fantasia/home/atks/makefile_tutorial/2.log /net/fantasia/home/atks/makefile_tutorial/3.log /net/fantasia/home/atks/makefile_tutorial/4.log /net/fantasia/home/atks/makefile_tutorial/5.log /net/fantasia/home/atks/makefile_tutorial/6.log /net/fantasia/home/atks/makefile_tutorial/7.log /net/fantasia/home/atks/makefile_tutorial/8.log /net/fantasia/home/atks/makefile_tutorial/9.log /net/fantasia/home/atks/makefile_tutorial/10.log /net/fantasia/home/atks/makefile_tutorial/11.log /net/fantasia/home/atks/makefile_tutorial/12.log /net/fantasia/home/atks/makefile_tutorial/13.log /net/fantasia/home/atks/makefile_tutorial/14.log /net/fantasia/home/atks/makefile_tutorial/15.log /net/fantasia/home/atks/makefile_tutorial/16.log /net/fantasia/home/atks/makefile_tutorial/17.log /net/fantasia/home/atks/makefile_tutorial/18.log /net/fantasia/home/atks/makefile_tutorial/19.log /net/fantasia/home/atks/makefile_tutorial/20.log /net/fantasia/home/atks/makefile_tutorial/21.log /net/fantasia/home/atks/makefile_tutorial/22.log /net/fantasia/home/atks/makefile_tutorial/23.log /net/fantasia/home/atks/makefile_tutorial/24.log /net/fantasia/home/atks/makefile_tutorial/25.log /net/fantasia/home/atks/makefile_tutorial/26.log /net/fantasia/home/atks/makefile_tutorial/27.log /net/fantasia/home/atks/makefile_tutorial/28.log /net/fantasia/home/atks/makefile_tutorial/29.log /net/fantasia/home/atks/makefile_tutorial/30.log /net/fantasia/home/atks/makefile_tutorial/31.log /net/fantasia/home/atks/makefile_tutorial/32.log /net/fantasia/home/atks/makefile_tutorial/33.log /net/fantasia/home/atks/makefile_tutorial/34.log /net/fantasia/home/atks/makefile_tutorial/35.log /net/fantasia/home/atks/makefile_tutorial/36.log /net/fantasia/home/atks/makefile_tutorial/37.log /net/fantasia/home/atks/makefile_tutorial/38.log /net/fantasia/home/atks/makefile_tutorial/39.log /net/fantasia/home/atks/makefile_tutorial/40.log /net/fantasia/home/atks/makefile_tutorial/41.log /net/fantasia/home/atks/makefile_tutorial/42.log /net/fantasia/home/atks/makefile_tutorial/43.log /net/fantasia/home/atks/makefile_tutorial/44.log /net/fantasia/home/atks/makefile_tutorial/45.log /net/fantasia/home/atks/makefile_tutorial/46.log /net/fantasia/home/atks/makefile_tutorial/47.log /net/fantasia/home/atks/makefile_tutorial/48.log /net/fantasia/home/atks/makefile_tutorial/49.log /net/fantasia/home/atks/makefile_tutorial/50.log /net/fantasia/home/atks/makefile_tutorial/51.log /net/fantasia/home/atks/makefile_tutorial/52.log /net/fantasia/home/atks/makefile_tutorial/53.log /net/fantasia/home/atks/makefile_tutorial/54.log /net/fantasia/home/atks/makefile_tutorial/55.log /net/fantasia/home/atks/makefile_tutorial/56.log /net/fantasia/home/atks/makefile_tutorial/57.log /net/fantasia/home/atks/makefile_tutorial/58.log /net/fantasia/home/atks/makefile_tutorial/59.log /net/fantasia/home/atks/makefile_tutorial/60.log /net/fantasia/home/atks/makefile_tutorial/61.log /net/fantasia/home/atks/makefile_tutorial/62.log /net/fantasia/home/atks/makefile_tutorial/63.log /net/fantasia/home/atks/makefile_tutorial/64.log /net/fantasia/home/atks/makefile_tutorial/65.log /net/fantasia/home/atks/makefile_tutorial/66.log /net/fantasia/home/atks/makefile_tutorial/67.log /net/fantasia/home/atks/makefile_tutorial/68.log /net/fantasia/home/atks/makefile_tutorial/69.log /net/fantasia/home/atks/makefile_tutorial/70.log /net/fantasia/home/atks/makefile_tutorial/71.log /net/fantasia/home/atks/makefile_tutorial/72.log /net/fantasia/home/atks/makefile_tutorial/73.log /net/fantasia/home/atks/makefile_tutorial/74.log /net/fantasia/home/atks/makefile_tutorial/75.log /net/fantasia/home/atks/makefile_tutorial/76.log /net/fantasia/home/atks/makefile_tutorial/77.log /net/fantasia/home/atks/makefile_tutorial/78.log /net/fantasia/home/atks/makefile_tutorial/79.log /net/fantasia/home/atks/makefile_tutorial/80.log /net/fantasia/home/atks/makefile_tutorial/81.log /net/fantasia/home/atks/makefile_tutorial/82.log /net/fantasia/home/atks/makefile_tutorial/83.log /net/fantasia/home/atks/makefile_tutorial/84.log /net/fantasia/home/atks/makefile_tutorial/85.log /net/fantasia/home/atks/makefile_tutorial/86.log /net/fantasia/home/atks/makefile_tutorial/87.log /net/fantasia/home/atks/makefile_tutorial/88.log /net/fantasia/home/atks/makefile_tutorial/89.log /net/fantasia/home/atks/makefile_tutorial/90.log /net/fantasia/home/atks/makefile_tutorial/91.log /net/fantasia/home/atks/makefile_tutorial/92.log /net/fantasia/home/atks/makefile_tutorial/93.log /net/fantasia/home/atks/makefile_tutorial/94.log /net/fantasia/home/atks/makefile_tutorial/95.log /net/fantasia/home/atks/makefile_tutorial/96.log /net/fantasia/home/atks/makefile_tutorial/97.log /net/fantasia/home/atks/makefile_tutorial/98.log /net/fantasia/home/atks/makefile_tutorial/99.log /net/fantasia/home/atks/makefile_tutorial/100.log
	touch /net/fantasia/home/atks/makefile_tutorial/cleaned.OK

clean: 
	-rm -rf /net/fantasia/home/atks/makefile_tutorial/*.OK /net/fantasia/home/atks/makefile_tutorial/*.log

Similar articles

Tools for reproducible research
Why use make?
Any interesting uses of makefiles to share?
How To Organize A Pipeline Of Small Scripts Together?

Acknowledgement

Thanks to Hyun for introducing this trick.

Maintained by

This page is maintained by Adrian.