Ou tu peux faire un makefile propre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| CC=gcc
CFLAGS=-Wall
OBJECTS_CLIENT=client.o
OBJECTS_SERVER=server.o server_main.o server_functions.o
BIN_CLIENT=client
BIN_SERVER=server
all: client server
client: $(OBJECTS_CLIENT)
<tab>@echo "Liaison du client"
<tab>$(CC) $(OBJECTS_CLIENT) -o $(BIN_CLIENT) $(CFLAGS)
server: $(OBJECTS_CLIENT)
<tab>@echo "Liaison du serveur"
<tab>$(CC) $(OBJECTS_CLIENT) -o $(BIN_CLIENT) $(CFLAGS)
%.o: %.c
<tab>@echo "Compile l'objet $@"
<tab>@$(CC) -c $(CFLAGS) -o $@ $(basename $@).c |
L'intérêt est que c'est plus court, et largement plus configurable ! Exemple, en release tu changes CFLAGS en :
CFLAGS=-Wall -O3 -DRELEASE
(-DRELEASE équivaut à faire #define RELEASE dans tous les fichiers sources)
Perso, j'utilise :
1 2 3 4 5 6 7 8 9
| # Mode release ?
#RELEASE=1
CXXFLAGS:=-Wall
ifdef RELEASE
CXXFLAGS+=-O2 -DRELEASE
else
CXXFLAGS+=-g
endif |
Ici RELEASE est en commentaire.
Après tu peux encore l'améliorer en créant dynamiquement la liste des objets avec wildcards et patsubst :
LISTE_OBJECTS=$(patsubst %.c,%.o,$(wildcard *.c))
C'est génial GNU Make !
@+ Haypo
Partager