title: What's the difference between $@ and $1 when there is only one parameter?
body: <p>There are some C code:  </p>
  
  <p><strong>apple.c</strong></p>
  
  <pre><code> #include&lt;stdio.h&gt;  
   int main(void)  
   {
     printf("apple\n");
     return 0;
   }
  </code></pre>
  
  <p><strong>Makefile</strong></p>
  
  <pre><code>apple:  
       gcc -c $@.c  
       gcc  $@.o -o $@ 
  </code></pre>
  
  <p><code>$ make apple</code><br>
  and it works perfectly. But if I modify <code>Makefile</code> as:  </p>
  
  <pre><code>apple:
       gcc -c $1.c
       gcc $1.o -o $1 
  </code></pre>
  
  <p><code>$ make apple</code><br>
  It does not work. What is the difference between <code>$@</code> and <code>$1</code> when there is only one parameter? </p>