[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