pacalet (4 December 2018 08:38) wrote:
> Not sure it is a bug but I think it deserves some attention. Here is an
> MCVE:
>
> ```make
> .PHONY: all clean
>
> all:;
>
> include a.mk
>
> a.mk: b
>
> b:
>         @touch $@
>         @printf '$$(info a.mk included)' > a.mk
>
> clean:
>         @rm -f a.mk b
> ```
>
> First make invocation:
>
> ```bash
> $ make
> make: Nothing to be done for 'all'.
> ```
>
> Second make invocation:
>
> ```bash
> make
> a.mk included
> make: Nothing to be done for 'all'.
> ```
>
> So we are in a situation where:
>
> 1. a makefile is included with the `include` directive (no `-include`),
> 2. the included makefile is not found,
> 3. make finds no rule to produce it and decides not to include it,

Doesn't it ?  It depends on b, albeit with an empty rule for what to do
when b changes.  So exercising b's rule and then a.mk's empty rule is
what I expect it to do.  Indeed, omitting your @ from the start of b's
rule commands, I see b is built on the first pass and a.mk is created.
I'm then puzzled that the first run doesn't report that it included
a.mk, though ...

> 4. make executes a recipe for a prerequisite of the included makefile
> that incidentally also produces the included makefile,
> 5. as the included makefile is finally found make does not fail... but
> it does not read the included makefile.
>
> This could be considered as contradictory with the documentation:

>> After all makefiles have been checked, if any have
>> actually been changed, make starts with a clean
>> slate and reads all the makefiles over again.

> Shouldn't make either fail or include?

Well, it shouldn't fail, since it does create a.mk; however, when I
change the redirect > a.mk on b's second command to > b.mk, it still
succeeds, despite there being no a.mk; presumably this is because a.mk
has a rule, that succeeds, so it's happy; but I still don't see why make
doesn't get upset about the unsatisfied include.

Let's see what Paul says when the other side of the Atlantic wakes up,

        Eddy.

_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to