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. _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make