> I have two makefiles:
> 
> *Makefile*
> 
> .PHONY: other_file
> other_file:
>       $(MAKE) -f Makefile2 other_file
> 
> my_file: other_file
>       touch $@
> 
> 
> *Makefile2*
> 
> other_file:
>       touch $@
> 
> 
> 
> When I first run the command, it builds my_file and other_file as expected.
> 
> > make my_file --trace --no-print-directory
> Makefile:6: target 'other_file' does not exist
> make -f Makefile2 other_file
> Makefile2:3: target 'other_file' does not exist
> touch other_file
> Makefile:9: update target 'my_file' due to: other_file
> touch my_file
> 
> 
> However, the next time I run the same command, it doesn't rebuild
> other_file, but it does rebuild my_file.
> 
> make my_file --trace --no-print-directory
> Makefile:6: target 'other_file' does not exist
> make -f Makefile2 other_file
> make[1]: 'other_file' is up to date.
> Makefile:9: update target 'my_file' due to: other_file
> touch my_file
> 
> 
> This is obviously because other_file is marked as PHONY.
> 
> What I would like is this functionality for recursive make support: When it
> is time to consider such a target, make will run its recipe unconditionally.
> After the recipe is run, make will use the target's timestamp to determine
> if other targets are out of date.
> 
> It would look something like: 
> *Makefile*
> 
> .RECURSIVE_MAKE: other_file
> other_file:
>       $(MAKE) -f Makefile2 other_file
> 
> my_file: other_file
>       touch $@
> 
> 
> *Makefile2*
> 
> other_file:
>       touch $@
> 
> 
> 
> > make my_file --trace --no-print-directory
> Makefile:6: target 'other_file' does not exist
> make -f Makefile2 other_file
> Makefile2:3: target 'other_file' does not exist
> touch other_file
> Makefile:9: update target 'my_file' due to: other_file
> touch my_file
> 
> > make my_file --trace --no-print-directory
> Makefile:6: target 'other_file' requires recursive make.
> make -f Makefile2 other_file
> make[1]: 'other_file' is up to date.
> make: 'my_file' is up to date.

Wouldn't the easy solution be to not make other_file a phony target and
instead force it to be rebuilt?

-8<-----------------------------
other_file: FORCE
        $(MAKE) -f Makefile2 other_file

my_file: other_file
        touch $@

FORCE:
-8<-----------------------------

regards Henrik

Reply via email to