On 03/23/18 06:04, Masahiro Yamada wrote: > Files generated by if_changed* must be added to 'targets' to include > *.cmd files. Otherwise, they would be regenerated every time. > > The build system automatically adds objects to 'targets' where > appropriate, such as obj-y, extra-y, etc. but does nothing for > intermediate files. So, each Makefile needs to add them by itself. > > There are some common cases where objects are generated by chained > rules. Lexers and parsers are compiled like follows: > > %.lex.o <- %.lex.c <- %.l > %.tab.o <- %.tab.c <- %.y > > They are common patterns, so it is reasonable to take care of them > in the core Makefile instead of requiring each Makefile to do so. > > At this moment, you cannot delete 'target += zconf.lex.c' because > zconf.lex.c is included from zconf.tab.c instead of being compiled. > This will be possible with further refactoring in the future. > > Signed-off-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx> Acked-by: Frank Rowand <frowand.list@xxxxxxxxx> -Frank > --- > > scripts/Makefile.build | 11 +++++++++++ > scripts/dtc/Makefile | 3 --- > scripts/genksyms/Makefile | 2 -- > scripts/kconfig/Makefile | 2 +- > 4 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index 77cce68..36f7990 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -538,6 +538,17 @@ $(call multi_depend, $(multi-used-m), .o, -objs -y -m) > targets += $(multi-used-m) > targets := $(filter-out $(PHONY), $(targets)) > > +# Add intermediate targets: > +# When building objects with specific suffix patterns, add intermediate > +# targets that the final targets are derived from. > +intermediate_targets = $(foreach sfx, $(2), \ > + $(patsubst %$(strip $(1)),%$(sfx), \ > + $(filter %$(strip $(1)), $(targets)))) > +# %.lex.o <- %.lex.c <- %.l > +# %.tab.o <- %.tab.[ch] <- %.y > +targets += $(call intermediate_targets, .lex.o, .lex.c) \ > + $(call intermediate_targets, .tab.o, .tab.c .tab.h) > + > # Descending > # --------------------------------------------------------------------------- > > diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile > index d17ba64..9cac65b 100644 > --- a/scripts/dtc/Makefile > +++ b/scripts/dtc/Makefile > @@ -27,6 +27,3 @@ HOSTCFLAGS_dtc-parser.tab.o := $(HOSTCFLAGS_DTC) > > # dependencies on generated files need to be listed explicitly > $(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h > - > -# generated files need to include *.cmd > -targets := dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h > diff --git a/scripts/genksyms/Makefile b/scripts/genksyms/Makefile > index f4749e8..aeefd47 100644 > --- a/scripts/genksyms/Makefile > +++ b/scripts/genksyms/Makefile > @@ -32,5 +32,3 @@ HOSTCFLAGS_lex.lex.o := -I$(src) > > # dependencies on generated files need to be listed explicitly > $(obj)/lex.lex.o: $(obj)/parse.tab.h > - > -targets := lex.lex.c parse.tab.c parse.tab.h > diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile > index 1dcd797..5def877 100644 > --- a/scripts/kconfig/Makefile > +++ b/scripts/kconfig/Makefile > @@ -207,7 +207,7 @@ gconf-objs := gconf.o zconf.tab.o > > hostprogs-y := conf nconf mconf kxgettext qconf gconf > > -targets += zconf.tab.c zconf.lex.c > +targets += zconf.lex.c > clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck > clean-files += gconf.glade.h > clean-files += config.pot linux.pot > -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html