If I create a Makefile: --8<-- .PHONY: all all: : late
.PHONY: /dev/null .early-generation /dev/null: .early-generation include /dev/null .early-generation: : early -->8-- when run on GNU Make 4.3[1] the output is: : early : late whereas when run on GNU Make 4.4.1 the output is just: : late If I change the middle part to: --8<-- .PHONY: .early-generation .real-file: .early-generation include .real-file -->8-- then the output from 4.4.1 matches that of 4.3. Strangely there's no complaint that .real-file doesn't actually exist. It looks like this change is probably a result of https://savannah.gnu.org/bugs/?60795 in 0c2fc00544b89314643561dcb6d78f35eb98da68. If this method is no longer supported, what is the preferred way to ensure that generated files are built in a separate step before Make considers which targets are out of date during the main build? Can we rely on the .real-file method described above continuing to work? Thanks. Mike. [1] The original Makefile using this construct was written for Make 3.81 in 2010 and I believe that it worked from then until at least Make 4.3.