On Tue, 2011-05-03 at 15:03 +0200, Edward Welbourne wrote: > > It all depends on the order in which make searches the rules, which is > > why changing things in the makefile matters. If make finds the second > > rule first then it sees it can build foo.eps and foo.pdf from foo.dat > > and it's all good. No circularity. > > Well, it still gets told the same edges in its directed graph, so it's > just as "cyclic" - when you ignore the direction on at least some > edges; i.e. it's not a tree - it's just that it's not interested in > the %.eps: %.pdf rule by the time it reads it, so it doesn't get > confused about it. The fact that this depends on the orer of rules > strikes me as highly suspect; it may be "by design" but I'd read it as > saying make isn't really building the full directed graph of > dependencies.
Absolutely true; it definitely does not (when it comes to pattern rules: the full graph is created for explicit rules of course). Make has a well-defined way to traverse the graph, described in the manual, and as soon as make finds the first acceptable match using that algorithm it will stop searching the graph and build the target. If there are ambiguities or cycles further on, that are never checked because make stops once it finds an acceptable solution, then you will never know it (unless you change the graph to expose them). To test and check every possibility would (a) be very slow, and (b) is not necessary to build, and (c) expressly violates the behavior documented in the manual, that many makefiles rely on to avoid these kinds of issues. Cheers! -- ------------------------------------------------------------------------------- Paul D. Smith <psm...@gnu.org> Find some GNU make tips at: http://www.gnu.org http://make.mad-scientist.net "Please remain calm...I may be mad, but I am a professional." --Mad Scientist _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make