[OSM-dev-fr] [info - LibOsm] Etat d'avancement de "ma" libosm (C++)

Sébastien Dinot sebastien.dinot at free.fr
Ven 24 Sep 00:52:22 BST 2010


Sébastien Dinot a écrit :
> Je joins à ce message un Makefile qui satisfait ces exigences.

Et, évidemment, couillon que je suis, je n'ai pas pu m'empêcher de me
planter de Makefile ! Tu trouveras le bon ci-joint (enfin, j'espère).

Sébastien

-- 
Sébastien Dinot, sebastien.dinot at free.fr
http://sebastien.dinot.free.fr/
Ne goûtez pas au logiciel libre, vous ne pourriez plus vous en passer !
-------------- section suivante --------------
# ----------------------------------------------------------------------------
# Copyright (C) 2010 by Sebastien Dinot <sebastien.dinot at free.fr>
#
# This file is part of LIBOSM
#
# LIBOSM is free software: you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# LIBOSM is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with LIBOSM. If not, see <http://www.gnu.org/licenses/>.
#
# ----------------------------------------------------------------------------

# Heure de compilation (affectation via ":=" et non "=" pour qu'elle ne soit
# pas reevaluee a chaque fois qu'elle est utilisee)
BUILD_TIMESTAMP := $(shell date "+%Y-%m-%d %H:%M:%S")

# Repertoires dans lesquels GNU Make doit rechercher les dependances
VPATH = ../:../xml:../osm

# Ensemble des repertoires de sources (meme liste que VPATH mais utilisant
# l'espace et non le caractere deux-points comme separateur
SRCDIR = $(subst :, ,$(VPATH))

# Alias de commandes
ECHO = echo -e
CC   = gcc
CXX  = g++
AR   = ar
SED  = sed

# Options a destination du pre-processeur
# CPPFLAGS    = -D_REENTRANT -DBUILD_TIMESTAMP='$(BUILD_TIMESTAMP)'
CPPFLAGS    = -DBUILD_TIMESTAMP='$(BUILD_TIMESTAMP)'

# Options a destination du compilateur C
# CFLAGS      = -Wall -Wextra -pthread -std=c99
CFLAGS      = -Wall -Wextra -std=c99

# Options a destination du compilateur C++
# CXXFLAGS    = -Wall -Wextra -pthread -std=c++0x
CXXFLAGS    = -Wall -Wextra -std=c++0x

# Repertoires ou doivent etre recherches les fichiers d'entete a inclure
INC         = -I/usr/include -I. $(subst ../,-I../,$(SRCDIR))

# Options a destination de l'editeur de lien et repertoires ou doivent etre
# recherches les bibliotheques a lier
LDFLAGS     = -L.

# Bibliotheques a lier
# LIBS        = -ldl -lstdc++ -lpthread -lm -lgeos -lgeos_c -lproj -lexpat -lspatialite
LIBS        = -ldl -lstdc++ -lm -lgeos -lgeos_c -lproj -lexpat -lspatialite

# Option de GCC lui demandant de lister les dépendances du projet (hors
# fichiers d'entete du systeme)
DEPFLAGS    = -MM


# Lorsqu'on execute la commande "(g)make all", les valeurs par defaut des
# parametres de compilation font que les compilateurs C/C++ :
# - inserent les informations de debogage dans les executables (DEBUG=yes),
# - n'optimisent pas le code genere (OPTIM=no) car cela peut perturber le
#   debogueur,
# Pour faire le contraire, executer la commande :
#
# DEBUG=no OPTIM=yes (g)make all
#
# toutes les combinaisons etant possibles...
ifneq ($(strip $(DEBUG)), no)
	DEBUG     = yes
	CPPFLAGS += -DDEBUG
	CFLAGS   += -g
	CXXFLAGS += -g
endif

ifeq ($(strip $(OPTIM)), yes)
	CPPFLAGS += -DNDEBUG
	CFLAGS   += -O3
	CXXFLAGS += -O3
else
	OPTIM = no
endif


# Construction automatique de la liste de fichiers sources
PARSER_SRC = $(shell cd .. ; ls -1 *.cpp ) \
	$(shell cd ../xml ; ls -1 *.cpp ) \
	$(shell cd ../osm ; ls -1 *.cpp)
# Construction automatique de la liste de fichiers de dependances
PARSER_DEP = $(patsubst %.cpp,%.d,$(patsubst %.c,%.d,$(PARSER_SRC)))
# Construction automatique de la liste de fichiers objets
PARSER_OBJ = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(PARSER_SRC)))
# Nom de l'executable a produire
PARSER_BIN = parser

# Variables concatenant l'ensemble des fichiers de sources et de dependances,
# de fichiers objets et des executables des differentes cibles
ALL_DEP = $(PARSER_DEP)
ALL_OBJ = $(PARSER_OBJ)
ALL_BIN = $(PARSER_BIN)

# Lorsque la prise en compte des dependances des sources n'est pas necessaire
# au traitement correct de la cible (cas par exemple des cibles 'clean' et
# 'distclean'), il est inutile d'inclure, et donc de generer, les fichiers de
# dependances. Les lignes qui suivent permettent de limiter la generation des
# fichiers de dependances aux cibles qui l'exigent.
DEPEND = no

# Dans la regle ci-dessous, on invoque findstring plutot que filter afin de
# prendre en compte en une seule instruction les cibles contenant la chaine
# "all".
ifeq ($(findstring all,$(MAKECMDGOALS)),all)
	DEPEND = yes
	-include $(ALL_DEP)
endif


# ----------------------------------------------------------------------------
# Regles de production des cibles
# ----------------------------------------------------------------------------

# Neutralisation des regles predefinies
.SUFFIXES:

# Executer les cibles suivantes meme si un fichier portant son nom existe et
# est plus recent que les dependances de la cible.
.PHONY: all clean distclean show

# Cible principale : generer tous les executables
all: $(ALL_BIN)

# Edition de lien de l'executable "parser"
$(PARSER_BIN): $(PARSER_OBJ)
	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(LIBS) -o $@ $^

# Compilation
%.o: %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) $(INC) -c -o $@ $<

%.o: %.cpp
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(INC) -c -o $@ $<

# Calcul des dependances
%.d: %.c
	$(CC) $(DEPFLAGS) $(CFLAGS) $(CPPFLAGS) $(INC) $< \
	| $(SED) 's,\($*\)\.o[ :]*,\1.o $@: ,' > $@

%.d: %.cpp
	$(CXX) $(DEPFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(INC) $< \
	| $(SED) 's,\($*\)\.o[ :]*,\1.o $@: ,' > $@


# ----------------------------------------------------------------------------
# Regles de nettoyage des repertoires
# ----------------------------------------------------------------------------

# Suppression des produits intermediaire et scories d'edition
clean:
	rm -f $(ALL_DEP) $(ALL_OBJ) *~ .*~

# Suppression des produits finaux en plus des precedents
distclean: clean
	rm -f $(ALL_BIN)


# ----------------------------------------------------------------------------
# Affichage des informations de compilation
# ----------------------------------------------------------------------------

show:
	@$(ECHO) "DEPEND   : $(DEPEND)"
	@$(ECHO) "DEBUG    : $(DEBUG)"
	@$(ECHO) "OPTIM    : $(OPTIM)"
	@$(ECHO) "DEPFLAGS : $(DEPFLAGS)"
	@$(ECHO) "CPPFLAGS : $(CPPFLAGS)"
	@$(ECHO) "CFLAGS   : $(CFLAGS)"
	@$(ECHO) "CXXFLAGS : $(CXXFLAGS)"
	@$(ECHO) "LDFLAGS  : $(LDFLAGS)"
	@$(ECHO) "VPATH    : $(VPATH)"
	@$(ECHO) "INC      : $(INC)"


More information about the dev-fr mailing list