Using a pattern rule is what I had done originally. But if I had a target like

```stan/src/%.$(PCH) : $(HEADER_TESTS)```

what happened was if someone for example did ```make CC=clang++ src/stan/prob/transform.pch``` it would make a precompiled header out of every header, not just src/stan/prob/transform.hpp . So, when I would do ```make CC=clang++ test-headers```, it would call ```$(MAKE)``` on each individual entry in ```$(HEADER_TESTS)``` which was causing it to go through the tree twice: The first time would succeed, the second time would say everything was up to date, and thus it would terminate instead of going through the whole tree for as many times as there were entries in ```$(HEADER_TESTS)```.

Maybe there is a way to have it only go through the tree once with a pattern rule, but I couldn't figure out how to do that except to change it to a a suffix rule.