-------
Robert Jørgensgaard Engdahl
Cum Laude MSc. C.S. 
SW-Developer, R&D
Video Services & Applications

Bang & Olufsen A/S
Peter Bangs Vej 15
DK-7600 Struer
Denmark

Phone: (+45)  96 84 44 05
Internal phone: 454405
e-mail: r...@bang-olufsen.dk
Location: Factory 1 - West

Philip Guenther <guent...@gmail.com> wrote on 29-04-2010 19:26:40:

> On Thu, Apr 29, 2010 at 3:59 AM, Edward Welbourne <e...@opera.com> 
wrote:
> >> Delete a "clean-depend" rule on sight,
> >
> > I cannot agree.
> > If I write a rule to make something, I also write a rule to get rid of
> > it.  It's just basic hygiene ...
> 
> I propose the following guideline: If you have a target that generates
> A (and B as a side-effect), then a 'clean*' rule that deletes B should
> also delete A (and vice versa).
> 
> So, I do have a rule to delete *.d files, it's called "clean".  Since
> I don't have rules for building .d files other than with .o files, it
> Just Works.
> 
> 
> >> or rename it to the more accurate "break-future-builds".
> >
> > If you have a sensible rule to generate .d files when needed, you
> > haven't broken your builds - you've just obliged yourself to
> > regenerate .d files.  Which may be wasteful, but see below.
> 
> Okay, so if you have a rule to delete .d files without deleting .o
> files, you need rules to build .d files.  In my experience, the only
> reason to have *either* of those is "because that's how the Makefile
> was originally written and the current behavior doesn't hurt enough
> for me to spend the time to fix it".
> 
> 
> ...
> > Speaking of the subtleties of dependency tracking: do an update in
> > your version control system, watch some header go away - and all files
> > that used to reference it drop those references.  Your .d files claim
> > a bunch of stuff depends on this missing file; but you have no rule to
> > regenerate it.  So make will not even try to compile anything (even
> > though everything *would* compile fine) because your .d file say that
> > all the .o files that need recompiled depend on a file that doesn't
> > exist any more; make clean-depend fixes that.
> 
> The fix for that has been documented for years on Paul's webpage, and
> is most easily done now with gcc's -MP option.
> 

This is also kind of the solution I would have used (kinda, as I would 
just have made a %.h rule), but then the gcc manual is a bit confusing, as 

it mentions phony targets (which would really break the idea of 
incremental
builds), but I see that the targets are only phony in the English sense, 
and not in the GNU Make sense (.PHONY).

> 
> > If generating .d as a side-effect, don't listen to the manual's advice
> > that says you need to sed its content to claim that the .d depends on
> > the same things the .o does.  If those things have changed, the .o
> > shall be regenerated and hence so shall the .d; and you don't need
> > this updated version of the .d file to discover that the .o needs
> > rebuilt.  Changes to .h files consequently never trigger re-exec.
> 
> Ah, it looks like your comments are addressed at just what's in the
> GNU make info pages and not the advanced method on Paul's webpage.  I
> agree that what's in the info pages has many of the problems you
> mention...which is why this thread is about updating what's there.
> 
> 
> Philip Guenther
> 
_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to