> > I don't think this is correct. Your "comment out" example (example2.mk) > is not accurate. To be accurate, you should comment out ONLY the > order-only prerequisite part, like this: > > $(DERIVED_OBJ_DIR)/test.o: # | $(DERIVED_OBJ_DIR) > > Not the entire line. If you do this, you'll see this example behaves > the same way as your 3rd example. Why? Read section 4.7, "Rules > without Commands or Prerequisites" in the GNU make manual. > > I believe GNU make's behavior in this situation is correct. > Thank you for correcting the example! I'm not sure whether it completely address my point, however. Section 4.7 says that gmake always runs rules with no prerequisites and commands for a nonexistent file. I understand your point above to be that #$(DERIVED_OBJ_DIR)/test.o: | $(DERIVED_OBJ_DIR) is very different than $(DERIVED_OBJ_DIR)/test.o: # | $(DERIVED_OBJ_DIR) because the latter makes $(DERIVED_OBJ_DIR)/test.o fall under section 4.7. Point taken.
I guess I'm questioning, however, why (example3.mk) $(DERIVED_OBJ_DIR)/test.o: | $(DERIVED_OBJ_DIR) counts as a "real" rule in the section 4.7 sense at all, given that its only purpose was to express an ordering relationship. To put it another way, imagine that order-only prerequisites were specified through a different syntax mechanism that did not look like an ordinary rule to gmake. Would this (should this) order-only prerequisite count as a "real rule" for section 4.7 purposes, given that no statement for how the target actually is built has been made? Thank you! Tony
_______________________________________________ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make