# Also note the top make file removes the default rule for %.o:%.[Sc], but # the default rules are still being used.
I fear you think that .EXPORT_ALL_VARIABLES should have exported your custom rule to the sub-make. It won't. I didn't notice any difference in say 4.1 but I dug out a similarly prehistoric version of make, 3.81, and its default rule for compiling .S files doesn't mention CFLAGS: COMPILE.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c ... %.o: %.S # commands to execute (built-in): $(COMPILE.S) -o $@ $< In make_top, there's an extra S on the name of the third variable used here: echo "Assembling: $< : lib CFLAGS=$(CFLAGGS)" \ I doubt that line continuation backslash is going to have the desired effect, if it were ever used, given the @ at the start of the next line and the lack of a semicolon after the echo. ________________________________ From: Bug-make <bug-make-bounces+martin.dorey=hds....@gnu.org> on behalf of Jeffrey.Fellin--- via Bug reports and discussion for GNU make <bug-make@gnu.org> Sent: Friday, September 3, 2021 13:34 To: bug-make@gnu.org <bug-make@gnu.org> Subject: sub makefile does not use correct value of CFLAGS from top make file, ***** EXTERNAL EMAIL ***** I have a project that compiles .S and .c files, and the value of CFLAGS in the sub makefile is not the same for the compile lines The version of make is GNU Make 3.82 Built for x86_64-redhat-linux-gnu Copyright (C) 2010 Free Software Foundation, Inc. I’m attaching a tarball containing the following files, for ease in reproducing the problem cflags_bug/make_top cflags_bug/base/sub_make cflags_bug/base/src/bug.S cflags_bug/base/src/hello.c The compile of bug.S succeeds, but doesn’t have the correct value of CFLAGS, as in the annotated output below. The compile of hello.c has the correct value of CFLAGS, but the compile fails due to the unsupported options to the cc. The extra options are for use by the project specific compiler. The top make undefines the default rules for %.o:%.c and %.o:%.S, has my understanding from these documents: Managing Projects with BNU Make, Third Edition, GNU Make pdf, Section 10.5.5 Match-Anything Pattern Rules The annotated execution of make -f make_top, supplied in the cflags_bug.tar $ make -ikf make_top;exit (cd base && make -f sub_make all) make[1]: Entering directory `/home/jfellin/cflags_bug/base' # This displays the value of CFLAGS that should be use in the # compilation of the .S and .c files # the compile errors are not important, but the different # value of CFLAGS, which are expected to be the same. # Also note the top make file removes the default rule for %.o:%.[Sc], but # the default rules are still being used. # Expected value in compile *.S and *.c check CFLAGS=-DTOP_MAKE -Wall -I base/inc -mlittle-endian --target=aarch64-arm-none-eabi -mcpu=cortex-a53+nocrypto+nofp+nosimd -mno-unaligned-access -mfpu=None -O -MD -I /home/jfellin/cflags_bug/base/../base/inc -D BASE_MAKE # Note this value of CFLAGS is not the one printed above cc -c -o /home/jfellin/cflags_bug/base/../base/src/bug.o /home/jfellin/cflags_bug/base/../base/src/bug.S # Note this value of CFLAGS is the one printed by the check_cflag rule # in the file, sub_make, cc -DTOP_MAKE -Wall -I base/inc -mlittle-endian --target=aarch64-arm-none-eabi -mcpu=cortex-a53+nocrypto+nofp+nosimd -mno-unaligned-access -mfpu=None -O -MD -I /home/jfellin/cflags_bug/base/../base/inc -D BASE_MAKE -mlittle-endian --target=aarch64-arm-none-eabi -mcpu=cortex-a53+nocrypto+nofp+nosimd -mno-unaligned-access -mfpu=None -c -o /home/jfellin/cflags_bug/base/../base/src/hello.o /home/jfellin/cflags_bug/base/../base/src/hello.c cc: warning: \u2018-mcpu=\u2019 is deprecated; use \u2018-mtune=\u2019 or \u2018-march=\u2019 instead cc: warning: \u2018-mcpu=\u2019 is deprecated; use \u2018-mtune=\u2019 or \u2018-march=\u2019 instead cc: error: unrecognized command line option \u2018-mlittle-endian\u2019 cc: error: unrecognized command line option \u2018-mno-unaligned-access\u2019 cc: error: unrecognized command line option \u2018-mfpu=None\u2019 cc: error: unrecognized command line option \u2018-mlittle-endian\u2019 cc: error: unrecognized command line option \u2018-mno-unaligned-access\u2019 cc: error: unrecognized command line option \u2018-mfpu=None\u2019 make[1]: [/home/jfellin/cflags_bug/base/../base/src/hello.o] Error 1 (ignored) make[1]: Leaving directory `/home/jfellin/cflags_bug/base' Jeff