Bonjour à tous,
Je suis en train de développer un programme en c++, et je rencontre des difficultés que je ne comprend pas pour le Makefile. Tous se passe bien jusqu'à la compilations des binaires finaux. Je vous donne le fichier et le résultat :
# compilateur
CC = g++
# cible
BINSRC := $(wildcard programmes/*.cpp)
TARGET := $(patsubst programmes/%.cpp, bin/%, $(BINSRC))
# liste auto des fichiers sources et objets
SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(patsubst src/%.cpp, obj/%.o, $(SOURCES))
LIBSO := obj/lib.so
# ajout des headers puis SDL
CPPFLAGS = -Iinc/
CPPFLAGS += $(shell sdl-config --cflags) -std=c++0x
OBJFLAGS = -fpic
# ajout des libraries SDL, SDL_image, OpenGL
#LIBFLAGS = $(shell sdl-config --libs)
#LIBFLAGS += -lSDL_image -lGL -lGLU -lSDL_mixer -lSDL_gfx -lSDL_ttf
# regle de liaison finale
all: $(LIBSO) $(TARGET)
#création des binaires
$(TARGET): $(BINSRC)
@echo creation du binaire $< ...
$(CC) $(CPPFLAGS) $(LIBSO) $< -o $@
#création librairie partagée
$(LIBSO): $(OBJECTS)
@echo liaision des objets ...
@$(CC) -shared -Wl,-soname,$(LIBSO) -o $(LIBSO) $(OBJECTS) -lc
# @rm -fv $(OBJECTS)
# regles de compilation des objetcs
obj/%.o: src/%.cpp
@echo compilation de $< ...
@$(CC) $(CPPFLAGS) $(OBJFLAGS) -c $< -o $@
# nettoyage
clean:
@echo nettoyage ...
@rm -fv $(TARGET)
@rm -fv $(OBJECTS)
@rm -fv $(LIBSO)
# nettoyage+
clean+: clean
@rm -fv *~ */*~
.PHONY: $(TARGET) clean clean+
résultat :
[...]
[OK jusqu'après la liaison de LIBSO]
[...]
g++ -Iinc/ -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -std=c++0x obj/lib.so programmes/prog1.cpp -o bin/prog1
creation du binaire programmes/marche_idiot.cpp ...
g++ -Iinc/ -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -std=c++0x obj/lib.so programmes/prog1.cpp -o bin/monde_idiot
obj/lib.so bin/marche_idiot bin/prog2
Donc, en somme, il utilise la même dépendance pour les deux cibles. De plus il relance toujours cette dernière étape, même si je ne touche pas les dépendances.
Un petit peu d'aide siouplait
Ice
Partager