title: Percentage sign followed by semicolon in makefile prerequisite list - need a simple pointer
body: <p>I recently browsed through a makefile with these lines of code in a OS design course at CMU.</p>
  
  <pre><code>$(TEST_PROGS) tests/verify_test: %: %.o libtraceback.a
      $(CC) -o $@ $@.o -L. libtraceback.a $(CFLAGS) $(LDFLAGS) $(LIBS) -static
      python ./symtabgen.py $@
  </code></pre>
  
  <p>I don't understand what "%:" could mean here. The TEST_PROGS variable contains list
  traceback/traceback_globals.o traceback/traceback.o</p>
  
  <p>traceback/traceback_globals.o traceback/traceback.o are required in making libtraceback.a</p>
  
  <p>I've went so far as to play around with removing %.o. Doing so stopped the TEST_PROGS objects from compiling</p>
  
  <p>Removing %: but keeping %.o gave out several warnings and nothing compiled.</p>
  
  <p>I'm hoping someone could shed some light into the syntax of makefile here. A quick Google search revealed that %: is related to secondary expansion. But in this code that I'm looking at,the special target .SECONDEXPANSION isn't defined. </p>
  
  <p>Please help, this code makes my brains hurt ...</p>