Files
agv_pro_ros2/slam_gmapping/openslam_gmapping/build_tools/Makefile.generic-shared-object
T
2025-06-06 16:15:07 +08:00

110 lines
2.8 KiB
Makefile

# Makefile generico per shared object
export VERBOSE
export CXX
# Nome del package
PACKAGE=$(notdir $(shell pwd))
# Libreria da generare:
# Se non si setta la variabile LIBNAME la libreria si chiama
# come la directory
ifndef LIBNAME
LIBNAME=$(PACKAGE)
endif
ifeq ($(MACOSX),1)
SONAME=$(LIBDIR)/lib$(LIBNAME).dylib
endif
ifeq ($(LINUX),1)
SONAME=$(LIBDIR)/lib$(LIBNAME).so
endif
APPLICATIONS= $(foreach a, $(APPS),$(BINDIR)/$(a))
INSTALL_SCRIPTS=$(foreach a, $(SCRIPTS),$(BINDIR)/$(a))
all: $(SONAME) $(APPLICATIONS) $(INSTALL_SCRIPTS)
.SECONDARY: $(OBJS) $(COBJS)
.PHONY: all clean copy doc
# Generazione della libreria
$(SONAME): $(OBJS) $(COBJS)
@$(MESSAGE) "Creating library lib$(LIBNAME).so"
ifeq ($(MACOSX),1)
@$(PRETTY) "$(CXX) $(LDFLAGS) -dynamiclib $(OBJS) $(COBJS) -L$(LIBDIR) $(LIBS) -install_name $@ -o $@"
endif
ifeq ($(LINUX),1)
@$(PRETTY) "$(CXX) -fPIC -shared $(OBJS) $(COBJS) -L $(LIBDIR) $(LIBS) $(LDFLAGS) -o $@"
@if ! $(PRETTY) "$(TESTLIB) $(SONAME)"; then $(MESSAGE) "Testing of $(SONAME) failed."; rm $(SONAME); exit 1; fi;
endif
# Generazione delle applicazioni
$(BINDIR)/%: %.o $(SONAME)
@$(MESSAGE) "Linking application `basename "$@"`"
@$(PRETTY) "$(CXX) $< -l$(LIBNAME) $(LDFLAGS) -L$(LIBDIR) $(LIBS) -o $@"
#Generazione dei moc files
moc_%.cpp: %.h
@$(MESSAGE) "Compiling MOC $@"
@$(PRETTY) "$(MOC) -i $< -o $@"
# Generazione degli oggetti
%.o: %.cpp
@$(MESSAGE) "Compiling $<"
@$(PRETTY) "$(CXX) -fPIC $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@"
%.o: %.c
@$(MESSAGE) "Compiling $<"
@$(PRETTY) "$(CC) -fPIC $(CPPFLAGS) $(CFLAGS) -c $< -o $@"
#Regole per la generazione delle dipendenze
OBJDEPS= $(foreach module,$(basename $(OBJS)),$(module).d) $(foreach a, $(APPS),$(a).d)
COBJDEPS=$(foreach module,$(basename $(COBJS)),$(module).d)
$(OBJDEPS): %.d: %.cpp
@$(MESSAGE) "Generating dependencies for $<"
@$(PRETTY) "$(CXX) $(CPPFLAGS) -MM -MG $< -MF $@"
$(COBJDEPS): %.d: %.c
@$(MESSAGE) "Generating dependencies for $<"
@$(PRETTY) "$(CC) $(CPPFLAGS) -MM -MG $< -MF $@"
#HEADERS=`ls *.h`
#PRECOMPILED_HEADERS=$(foreach file,$(basename $(HEADERS)), $(file).pch)
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),copy)
ifneq ($(MAKECMDGOALS),dep)
-include $(OBJDEPS) $(COBJDEPS)
endif
endif
endif
dep: $(OBJDEPS) $(COBJDEPS)
# GLi script vengono semplicemente copiati
$(BINDIR)/%.sh: %.sh
@$(MESSAGE) "Installing script `basename "$@"`"
@$(PRETTY) "cp $< $@"
@$(PRETTY) "chmod +x $@"
#doc:
# rm -rf doc/$(PACKAGE)
#ifeq ($(strip $(DOCTITLE)),)
# kdoc -L doc -d doc/$(PACKAGE) -n "Package $(PACKAGE) (lib$(PACKAGE).so)" $(HEADERS)
#else
# kdoc -L doc -d doc/$(PACKAGE) -n "$(DOCTITLE) (lib$(PACKAGE).so)" $(HEADERS)
#endif
clean:
@$(MESSAGE) "Cleaning $(PACKAGE)"
@$(PRETTY) "rm -f $(SONAME) $(APPLICATIONS)"
@$(PRETTY) "rm -f *.o *.d core *~ moc_*.cpp"
copy: clean
tar -C .. -cvzf `date +../$(PACKAGE)-%d%b%y.tgz` $(PACKAGE)