tags 14396 notabug close 14396 thanks On 05/14/2013 05:07 AM, Mike Frysinger wrote: > i've been playing around with subdir-objects and noticed that sub-compiles > don't respect AM_CPPFLAGS :( > The failure you're seeing is due to a user error. See below. I'm thus closing this report as "not a bug". We are however free to continue our discussion here anyway (it should still be registered in the tracker).
> happens with automake 1.13.1 and the latest > 1.13.1d test release. also using autoconf-2.69 if it matters. > > $ cat configure.ac > AC_INIT([pkg], [0]) > AM_INIT_AUTOMAKE([subdir-objects]) > AC_PROG_CC > AM_PROG_CC_C_O > AC_CONFIG_FILES([Makefile]) > AC_OUTPUT > > $ cat Makefile.am > noinst_PROGRAMS = > AM_CPPFLAGS = -DXXX > OK, but ... > include src/Makemodule.am > > $ cat src/Makemodule.am > noinst_PROGRAMS += src/x > src_x_SOURCES = src/x.c > src_x_CPPFLAGS = -DYYY > > ... here you define per-program CPPFLAGS for src/x, and that *completely overrides* global AM_CPPFLAGS. That is by design. If you want the flags in AM_CPPFLAGS to be used also when compiling the objects of src/x, you need to add those flags *explicitly* to src_x_CPPFLAGS: src_x_CPPFLAGS = $(AM_CPPFLAGS) -DYYY > $ cat src/x.c > main(){} > > $ touch NEWS README AUTHORS ChangeLog COPYING > $ autoreconf -f -i > $ ./configure > $ make > gcc -DPACKAGE_NAME=\"pkg\" -DPACKAGE_TARNAME=\"pkg\" -DPACKAGE_VERSION=\"0\" - > DPACKAGE_STRING=\"pkg\ 0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" - > DPACKAGE=\"pkg\" -DVERSION=\"0\" -I. -DYYY -g -O2 -MT src/src_x-x.o -MD > -MP > -MF src/.deps/src_x-x.Tpo -c -o src/src_x-x.o `test -f 'src/x.c' || echo > './'`src/x.c > > there is no -DXXX there :(. i know the var is set correctly because if i > manually add $(AM_CPPFLAGS) to the src_x_CPPFLAGS line, it shows up. > And that is what you're supposed to do :-) If something in the documentation doesn't make that clear, feel free to provide a patch to improve the situation. > reading the generated Makefile i see: > COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ > $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) > and this is good. but that var isn't used to compile things. instead, > there's this rule: > $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) > $(src_x_CPPFLAGS) > $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_x-x.o -MD -MP -MF > src/$(DEPDIR)/src_x-x.Tpo -c -o src/src_x-x.o `test -f 'src/x.c' || echo > '$(srcdir)/'`src/x.c > > and indeed, there's no AM_CPPFLAGS in there. > Again, that is by design. > all the other good stuff (including the deprecated vars) though ... > -mike HTH, Stefano