Lee Eric writes: > Hi, > > New to Make and after reading some pages from the GNU Make book I'm > confused about some explanations. > > 1. From the O'Reilly book it mentions "Normally, phony targets will > be always be executed ...". I don't quite follow it as "clean" > is a typical phony target but it's not executed every time until > we tell Make. So my question is, if a Makefile has multiple > targets, what's the rule of Make to process the targets? Because > after reading the book I have no idea what targets would be > executed.
A phony target is executed each time it is mentioned on the command line, or as a prerequisite of another target that is being built. Essentially, a phony target is never considered 'up-to-date' each time Make is started. > > 2. What's the actual/practical use of Empty Targets? The example in that > book is > > prog: size prog.o > $(CC) $(LDFLAGS) -o $@ $^ > size: prog.o > size $^ > touch size > > but I didn't see the use of that size target, because even I change it to > > prog: prog.o > $(CC) $(LDFLAGS) -o $@ $^ > > is still valid. So why we need to use empty targets? The 'size' target here is used to encapsulate a sequence of commands that you might like to execute frequently during development. In this case, it's showing the size of the contents of the prerequisite object files -- facilitating tracking code & data bloat. This 'size' is a little bit smart -- it only runs when the object file has changed since the last time 'size' was executed. As an experiment, try making it phony and executing it without having prog.o change. -- It's not about where you're from, it's wear your hat.
