title: Makefile Secondary Expansion
body: <p>The gnu manual section 3.8 says:</p>
  
  <p>"During the secondary expansion of explicit rules, <code>$$@</code> and <code>$$%</code> evaluate, respectively, to the file name of the target and, when the target is an archive member, the target member name. The <code>$$&lt;</code> variable evaluates to the first prerequisite in the first rule for this target. <code>$$^</code> and <code>$$+</code> evaluate to the list of all prerequisites of rules that have already appeared for the same target (<code>$$+</code> with repetitions and <code>$$^</code> without). The following example will help illustrate these behaviors:</p>
  
  <pre><code>.SECONDEXPANSION:
  foo: foo.1 bar.1 $$&lt; $$^ $$+ # line #1
  foo: foo.2 bar.2 $$&lt; $$^ $$+ # line #2
  foo: foo.3 bar.3 $$&lt; $$^ $$+ # line #3
  </code></pre>
  
  <p>In the first prerequisite list, all three variables ($$&lt;, $$^, and $$+) expand to the empty
  string."</p>
  
  <p>My question: Why does the <code>$$&lt;</code> expand to empty string? The paragraph above says the it should evaluate to the first requisite to the first rule for this target. Wouldn't that be foo.1 ?</p>