Message ID | 1383676405-25536-1-git-send-email-yann.morin.1998@free.fr |
---|---|
State | Superseded |
Headers | show |
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote: >From: "Yann E. MORIN" <yann.morin.1998@free.fr> > >For out-of-tree builds, this use-case fails to build: > $ make clean all > >This is because 'all' is filtered-out in the Makefile wrapper, since >the wrapper itself has a 'all' target. > >The 'all' target is just the usual naming for the default target in a >Makefile. In fact, the first target is the default one, so we can name >it whatever we want. > >Rename the Makefile wrapper 'all' target to avoid name-clashing. > >Fixes #6644. > >Reported-by: Ryan Barnett <rjbarnet@rockwellcollins.com> >Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> >Cc: Ryan Barnett <rjbarnet@rockwellcollins.com> >Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> >Tested-by: Ryan Barnett <rjbarnet@rockwellcollins.com> >--- >Changes v2->v3: > - add bug reference (Ryan) > >Changes v1->v2 > - fix one missed 'all' occurence > >--- > support/scripts/mkmakefile | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > >diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile >index cef2ec7..27b1507 100755 >--- a/support/scripts/mkmakefile >+++ b/support/scripts/mkmakefile >@@ -32,16 +32,16 @@ MAKEFLAGS += --no-print-directory > > .PHONY: all \$(MAKECMDGOALS) > >-all := \$(filter-out all Makefile,\$(MAKECMDGOALS)) >+all := \$(filter-out Makefile,\$(MAKECMDGOALS)) > >-all: >+_all: > \$(MAKE) \$(MAKEARGS) \$(all) > > Makefile:; > >-\$(all): all >+\$(all): _all > @: > >-%/: all >+%/: _all > @: > EOF Just curious: if you now type 'make all', which of the above rules gets executed? Can you explain what is going on here? Thanks, Thomas
Thomas DS, All, On 2013-11-05 19:39 +0100, Thomas De Schampheleire spake thusly: > "Yann E. MORIN" <yann.morin.1998@free.fr> wrote: > >From: "Yann E. MORIN" <yann.morin.1998@free.fr> > > > >For out-of-tree builds, this use-case fails to build: > > $ make clean all > > > >This is because 'all' is filtered-out in the Makefile wrapper, since > >the wrapper itself has a 'all' target. > > > >The 'all' target is just the usual naming for the default target in a > >Makefile. In fact, the first target is the default one, so we can name > >it whatever we want. > > > >Rename the Makefile wrapper 'all' target to avoid name-clashing. [moved the question here, it's easier to answer below] > Just curious: if you now type 'make all', which of the above rules > gets executed? Can you explain what is going on here? Please, follow the numbers, below: > >diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile > >index cef2ec7..27b1507 100755 > >--- a/support/scripts/mkmakefile > >+++ b/support/scripts/mkmakefile > >@@ -32,16 +32,16 @@ MAKEFLAGS += --no-print-directory > > > > .PHONY: all \$(MAKECMDGOALS) > > > >-all := \$(filter-out all Makefile,\$(MAKECMDGOALS)) > >+all := \$(filter-out Makefile,\$(MAKECMDGOALS)) (1) With 'make all', the variable $(MAKECMDGOALS) is the string "all" (without the quotes). So the variable $(all) is assigned the string "all" (still without quotes). > > > >-all: > >+_all: > > \$(MAKE) \$(MAKEARGS) \$(all) (3) And finally here, the rulle is: make -C /path/to/buildroot O=$(pwd) all `----------------------------' `-' $(MAKEARGS) $(all) > > > > Makefile:; > > > >-\$(all): all > >+\$(all): _all (2) And here the variable $(all) ix expanded, and as it depends on _all, the rulle _all above is executed > > @: > > > >-%/: all > >+%/: _all > > @: > > EOF > Regards, Yann E. MORIN.
diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile index cef2ec7..27b1507 100755 --- a/support/scripts/mkmakefile +++ b/support/scripts/mkmakefile @@ -32,16 +32,16 @@ MAKEFLAGS += --no-print-directory .PHONY: all \$(MAKECMDGOALS) -all := \$(filter-out all Makefile,\$(MAKECMDGOALS)) +all := \$(filter-out Makefile,\$(MAKECMDGOALS)) -all: +_all: \$(MAKE) \$(MAKEARGS) \$(all) Makefile:; -\$(all): all +\$(all): _all @: -%/: all +%/: _all @: EOF