Frank wrote:

Can anyone provide a working example of using the generating perquisites
automatically?  It's from section 4.14?  I want to generate the depends
for each .cpp/.o automatically i.e. generate a .d

This rule is lifted from our infrastructure. It's being used with GNU make 3.70 through 3.80 on about a dozen operating systems and compilers.

ifneq ($(DEPENDFLAGS),)

# generate dependencies only if they don't yet exist, removing anything
# not under $(TOPDIR) or $(BUILDDIR) (e.g., system headers) from the
# list; this is done by splitting up dependencies using tr so that there
# is just one per line and then replacing the values of $(TOPDIR) and
# $(BUILDDIR) with the actual make variable names themselves
# move IBM xlC generated .u files to the respective .d files

define makedep
        -@(if [ ! -f $@ ] ; then                                       \
            echo "generating dependencies for $<" ;                    \
                                                                       \
            stripexp="s:/$$::;s:[^/]*$$::";                            \
            RWTSRCDIR=`echo $(TOPDIR) | sed "$$stripexp"`rwtest;       \
                                                                       \
            sedexp1="s:\([^ :]\)\(  */\):\1 [EMAIL PROTECTED]:" ;                 \
            sedexp2="/:[^/]*$$/p;                                      \
                    s:$$RWTSRCDIR:$$""(TOPDIR)/\.\./rwtest:gp;         \
                    s:$(TOPDIR):$$""(TOPDIR):gp;                       \
                    s:$(BUILDDIR):$$""(BUILDDIR):gp" ;                 \
                                                                       \
            echo "$(CXX) $(DEPENDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $<"    \
                 >>$(LOGFILE) ;                                        \
            $(CXX) $(DEPENDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $<           \
                | sed "$$sedexp1" | tr "@" "\n" | sed -n "$$sedexp2"   \
                  >$@ ;                                                \
            if [ ! -s $@ -a -f $*.u ] ; then                           \
                sed "$$sedexp1" $*.u | tr "@" "\n" | sed -n "$$sedexp2"\
                    > $@ ;                                             \
                rm -f $.i $*.u ;                                       \
            fi ;                                                       \
       fi)
endef

%.d: %.cpp
        $(makedep)

%.d: %.$(AS_EXT)
        $(makedep)

else

%.d:

endif


The .d file for assert.cpp might look like this:


$ cat /build/sebor/gcc-11s/lib/assert.d
assert.o: $(TOPDIR)/src/assert.cpp \
 $(TOPDIR)/include/ansi/stdio.h \
 $(TOPDIR)/include/rw/_defs.h \
 $(TOPDIR)/include/rw/_config.h \
 $(BUILDDIR)/include/config.h \
 $(TOPDIR)/include/ansi/stddef.h \
 $(TOPDIR)/include/ansi/stdarg.h \
 $(TOPDIR)/include/ansi/stdlib.h \
 $(TOPDIR)/include/ansi/time.h \

Regards
Martin




_______________________________________________ Help-make mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/help-make

Reply via email to