bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Non existing target not marked as new


From: Paul Smith
Subject: Re: Non existing target not marked as new
Date: Thu, 09 Feb 2017 00:52:02 -0500

On Wed, 2017-02-08 at 13:48 +0000, Raz Manor wrote:
> I created a makefile using instructions for this post: http://make.mad
> -scientist.net/papers/advanced-auto-dependency-generation/
> To test it, I make all my files, then deleted one .d file and touched
> one of the header files present in that .d file.
> The target, however, was not rebuilt.
>  
> Running with -d, I found that the empty rule to make %.d files, ran
> the first time the %.d file was needed, in the -include directive.
> Than the target was marked as built by make, so the second time it was
> needed, when building the .o file, the empty recipe was not re-run.
> However, since the .d file still didn’t exist, the .o file was not
> rebuilt.

I'm not able to understand from this description what exactly you are
seeing.  Maybe you can provide a small reproducible example.

When I tried a simple example and deleted any .d file, without even
touching any header file, the object file is rebuilt (which also
rebuilds the .d file as a side-effect).  This is the intended behavior:
since the .d file is missing we can't know what the dependencies are and
we have to assume the object file must be rebuilt.

One thing that maybe should be made more clear and obvious in that page
is the need to set the SRCS variable.  At the very end of the sample
makefile you'll see the line:

  -include $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS)))

This line requires that the make variable SRCS be set to the list of
source files, otherwise nothing will work.  Since that's down at the end
of the makefile if you don't read carefully the rest of that section:

> Also, this assumes the SRCS variable contains all the source files
> (not header files) you want to track dependencies for.

then you might miss it.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]