Jim Meyering wrote: > Jim Meyering wrote: > ... >> On the subject of converting to non-recursive make in lib/, >> I have at least one problem so far: how can I select different >> CFLAGS depending on the directory containing the file I'm compiling? >> >> As you know, we currently have three different sets of warnings: >> - strict, for src/ >> - less strict, for lib/ >> - even less strict, for gnulib-tests/ >> >> I could certainly do that with GNU make by defining >> >> src_CFLAGS = ... >> lib_CFLAGS = ... >> gnulib-tests_CFLAGS = ... >> >> and then including $($(@D)_CFLAGS) in the generic compilation rule. >> >> Hmm... maybe override that default rule in cfg.mk, where only GNU make >> will see it. Hah! So the act of writing this question has provided me >> with the solution: add these lines to cfg.mk: >> >> COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ >> $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $($(@D)_CFLAGS) >> >> src_CFLAGS = -WBOGUS >> >> That -WBOGUS is just to test, and I confirm that it does what I expect. > > Better than that, simply append to $(COMPILE). > Here's what I'm considering, now: > > diff --git a/cfg.mk b/cfg.mk > index 489f946..039c6ff 100644 > --- a/cfg.mk > +++ b/cfg.mk > @@ -558,3 +558,11 @@ exclude_file_name_regexp--sc_prohibit_test_backticks = \ > # Exempt test.c, since it's nominally shared, and relatively static. > exclude_file_name_regexp--sc_prohibit_operator_at_end_of_line = \ > ^src/(ptx|test|head)\.c$$ > + > +# Augment GNU make's compilation command to include our per-directory > +# CFLAGS options: > +COMPILE += $($(@D)_CFLAGS) > + > +src_CFLAGS = $(WARN_CFLAGS) > +lib_CFLAGS = $(GNULIB_WARN_CFLAGS) > +gnulib-tests_CFLAGS = $(GNULIB_TEST_WARN_CFLAGS)
We could even add per-basename and per-full-file-name options: COMPILE += $($(@D)_CFLAGS) $($(@F)_CFLAGS) $($(@)_CFLAGS) something I've wanted for a long time. Of course, this works only with GNU make, so it's fine for warnings and optimization-related things.