title: why does "make" delete target files only if implicit
body: <p>Suppose I have a Makefile like this</p>
  
  <pre><code>B1.txt: A1.txt
      python big_long_program.py A1.txt &gt; $@
  
  correct1.txt: B1.txt reference.txt
      diff -q B1.txt reference.txt
      touch $@
  </code></pre>
  
  <p>Then the output when I make correct1.txt is pretty well what I would expect:</p>
  
  <pre><code>python big_long_program.py A1.txt &gt; B1.txt
  diff -q B1.txt reference.txt
  touch correct1.txt
  </code></pre>
  
  <p>Now if I have lots of files, B1.txt, B2.txt, B3.txt etc, so create an implicit rule:</p>
  
  <pre><code>B%.txt: A%.txt
      python big_long_program.py A$*.txt &gt; $@
  
  correct%.txt: B%.txt reference.txt
      diff -q B$*.txt reference.txt
      touch $@
  </code></pre>
  
  <p>Instead this happens when I make correct1.txt:</p>
  
  <pre><code>python big_long_program.py A1.txt &gt; B1.txt
  diff -q B1.txt reference.txt
  touch correct1.txt
  rm B1.txt
  </code></pre>
  
  <p>i.e. there difference is that now the file B1.txt has been deleted, which in many cases is really bad. </p>
  
  <p>So why are implicit rules different? Or am I doing something wrong?</p>