OpenSceneGraph/Make/makerules
Don BURNS 693a889ece Various changes to the BUILD system:
o Object files now go in subdirectories named $(OS)$(ARCH).Opt and
       $(OS)$(ARCH).Debug for OS's that support both architectures.
          eg.  Linux32.Opt and Linux32.Debug

     o Libraries links are now placed in lib/$(OS)$(ARCH)
          eg.  lib/Linux32/

     o Binaries are now placed in bin/$(OS)$(ARCH)
          eg. bin/Linux32

     o 'make install' and 'make instlinks' now place files/links in
       /usr/local/{include,lib,share/OpenSceneGraph} by default on
       most systems (Solaris still goes in /opt/OpenSceneGraph).
       Rather than having the somwehat confusing INST_SYS_PREFIX and
       INST_SHARE_PREFX, you can override these with just
            INST_LOCATION
       For example,
             make INST_LOCATION=/usr
       will place files at /usr/include, /usr/lib,
       /usr/share/OpenSceneGraph.
2003-03-13 02:53:40 +00:00

189 lines
4.9 KiB
Plaintext

default: opt
opt: $(EXEC:=.opt)\
$(LIB:=.opt)\
$(PLUGIN:=.opt)\
debug: $(EXEC:=.dbg)\
$(LIB:=.dbg)\
$(PLUGIN:=.dbg)\
cleandepend: cleandependopt cleandependdbg
cleandependopt:
@[ -d $(OPTDIR) ] && cd $(OPTDIR); rm -f Makedepend; rm -rf .depend
cleandependdbg:
@[ -d $(DEBUGDIR) ] && cd $(DEBUGDIR); rm -f Makedepend; rm -rf .depend
cleantarget: cleantargetopt cleantargetdbg
cleantargetopt:
@[ -d $(OPTDIR) ] && cd $(OPTDIR); rm -f $(EXEC) $(LIB) $(PLUGIN)
cleantargetdbg:
@[ -d $(DEBUGDIR) ] && cd $(DEBUGDIR); rm -f $(EXEC) $(LIB) $(PLUGIN)
clean: cleanopt cleandbg
cleanopt:
@[ -d $(OPTDIR) ] && cd $(OPTDIR); rm -f $(OBJS) Makedepend; rm -rf .depend
cleandbg:
@[ -d $(DEBUGDIR) ] && cd $(DEBUGDIR); rm -f $(OBJS) Makedepend; rm -rf .depend
clobber: clobberdbg clobberopt
clobberopt:
rm -rf $(OPTDIR)
clobberdbg:
rm -rf $(DEBUGDIR)
beautify:
for f in *.cpp ; do mv $$f $$f.bak; bcpp $$f.bak $$f; rm $$f.bak; done
for f in *.h ; do mv $$f $$f.bak; bcpp $$f.bak $$f; rm $$f.bak; done
docs:
[ "$(TARGET_BASENAME)" != "" ] && \
mkdir -p $(TOPDIR)/doc/doc++/$(TARGET_BASENAME) && \
doc++ -d $(TOPDIR)/doc/doc++/$(TARGET_BASENAME) -H -A \
$(TOPDIR)/include/$(TARGET_BASENAME)/* && \
echo "$(TARGET_BASENAME) HTML documentation created in "\
"$(TOPDIR)/doc/doc++/$(TARGET_BASENAME)"
$(EXEC): $(OBJS)
$(C++) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
## Mac OSX makes the distinction between -dynamiclib and -bundle
## causing us to have to make a special case here, rather than
## just redefining the SHARED argument.
ifeq ($(OS),Darwin)
$(LIB): $(OBJS)
$(C++) $(LDFLAGS) -dynamiclib $(OBJS) $(LIBS) -o $@
$(PLUGIN): $(OBJS)
$(C++) $(LDFLAGS) -bundle $(OBJS) $(LIBS) -o $@
else
ifeq ($(OS),HP-UX)
# we need to explicitly tell the linker the library name - else it will
# include paths like ../../../libosg.sl into executables
$(LIB) $(PLUGIN) : $(OBJS)
$(C++) $(LDFLAGS) $(SHARED) $(OBJS) $(LIBS) -Wl,+h -Wl,$@ -o $@
else
$(LIB) $(PLUGIN) : $(OBJS)
$(C++) $(LDFLAGS) $(SHARED) $(OBJS) $(LIBS) -o $@
endif # not HP-UX
endif # not Darwin
$(EXEC:=.dbg) :
@[ -d $(DEBUGDIR) ] || mkdir $(DEBUGDIR)
@cd $(DEBUGDIR); \
$(MAKE) -f ../GNUmakefile "DOF=$(DBGF)" TOPDIR=../${TOPDIR} \
THISDIR=../$(THISDIR)\
MAKEDEPEND=Makedepend $(EXEC)
@$(MAKE) LNSRC=$(DEBUGDIR)/$(EXEC) LNDEST=$(BININST)/$(OS)$(ARCH)/$(EXEC) __link
$(LIB:=.dbg) : $(PLUGIN:=.dbg)
@[ -d $(DEBUGDIR) ] || mkdir $(DEBUGDIR)
@cd $(DEBUGDIR);\
$(MAKE) -f ../GNUmakefile "DOF=$(DBGF)" TOPDIR=../${TOPDIR} \
THISDIR=../$(THISDIR)\
MAKEDEPEND=Makedepend $(LIB)
@$(MAKE) LNSRC=$(DEBUGDIR)/$(LIB) LNDEST=$(LIBINST)/$(OS)$(ARCH)/$(LIB) __link
$(PLUGIN:=.dbg) :
@[ -d $(DEBUGDIR) ] || mkdir $(DEBUGDIR)
@cd $(DEBUGDIR); \
$(MAKE) -f ../GNUmakefile "DOF=$(DBGF)" TOPDIR=../${TOPDIR} \
THISDIR=../$(THISDIR)\
MAKEDEPEND=Makedepend $(PLUGIN)
@$(MAKE) LNSRC=$(DEBUGDIR)/$(PLUGIN) LNDEST=$(PLUGININST)/$(PLUGIN) __link
$(EXEC:=.opt) :
@[ -d $(OPTDIR) ] || mkdir $(OPTDIR)
@cd $(OPTDIR); \
$(MAKE) -f ../GNUmakefile DOF=$(OPTF) TOPDIR=../${TOPDIR} \
THISDIR=../$(THISDIR)\
MAKEDEPEND=Makedepend $(EXEC)
@$(MAKE) LNSRC=$(OPTDIR)/$(EXEC) LNDEST=$(BININST)/$(OS)$(ARCH)/$(EXEC) __link
$(LIB:=.opt) :
@[ -d $(OPTDIR) ] || mkdir -p $(OPTDIR)
@cd $(OPTDIR);\
$(MAKE) -f ../GNUmakefile DOF=$(OPTF) TOPDIR=../${TOPDIR} \
THISDIR=../$(THISDIR)\
MAKEDEPEND=Makedepend $(LIB)
@$(MAKE) LNSRC=$(OPTDIR)/$(LIB) LNDEST=$(LIBINST)/$(OS)$(ARCH)/$(LIB) __link
$(PLUGIN:=.opt) :
@[ -d $(OPTDIR) ] || mkdir -p $(OPTDIR)
@cd $(OPTDIR); \
$(MAKE) -f ../GNUmakefile DOF=$(OPTF) TOPDIR=../${TOPDIR} \
THISDIR=../$(THISDIR)\
MAKEDEPEND=Makedepend $(PLUGIN)
@$(MAKE) LNSRC=$(OPTDIR)/$(PLUGIN) LNDEST=$(PLUGININST)/$(PLUGIN) __link
## Revamped method for making Makedepend files
## Under this method, Makedepend simply includes
## all dependency files which are built for each
## individual source file. At update, only the individual
## dependency file is updated rather than the whole of Makedepend
Makedepend : $(CXXFILES) $(CFILES)
ifeq ($(OS),IRIX)
touch $@
else
@ touch $@
@if [ ! -d .depend ] ; then \
mkdir .depend;\
depfiles="$+";\
else\
depfiles="$?";\
fi;\
if [ ! -z "$$depfiles" ]; then\
for f in $$depfiles; do \
echo "$(C++) $(DEPARG) $(INC) $$f pipeto .depend/`basename $$f`"; \
$(C++) $(DEPARG) $(INC) $$f > .depend/`basename $$f`; \
grep $$f $@ || echo include .depend/`basename $$f` >> Makedepend ;\
done;\
fi
endif
ifeq (0,1) ##### OLD WAY : Keep until we've proven that this doesn't trip up
##### on other OS's.
Makedepend : $(CXXFILES) $(CFILES)
ifeq ($(OS),IRIX)
touch $@
else
$(C++) $(INC) $(DEPARG) $^ > $(MAKEDEPEND)
endif
endif
.SUFFIXES: .cpp .o
.cpp.o:
$(C++) $(CXXFLAGS) -c $<
depend : $(MAKEDEPEND)
__link :
sh $(TOPDIR)/Make/dolink.sh $(TOPDIR) $(LNSRC) $(LNDEST) "$(LINK)"
__instfiles :
@echo $(INSTFILES)
sinclude $(MAKEDEPEND)