2010-01-19 6 views
1

gcc 4.4.2 c89Meilleure pratique lors de l'écriture d'un Makefile

J'ai écrit ce Makefile. Je me demande si c'est un bon design et facile à entretenir?

Je pense que cltsvr_ults.o est lié à la fois le SVR_OBJECTS et CLT_OBJECTS. Est-ce que cela semble correct?

Un grand merci pour toutes les suggestions,

# ------------- SOURCE FILE ------------------------ 
SVR_OBJECTS = server.o cltsvr_ults.o test_svr.o 
CLT_OBJECTS = client.o cltsvr_ults.o test_clt.o 

# ------------- COMPILER OPTIONS ------------------- 
CFLAGS = -ggdb -Wall -pthread -std=c89 
CC = gcc 
PLATFORM = -DLINUX 
LIBS = -lpthread 

# ------------- TARGETS ---------------------------- 
all: svr clt 

svr: $(SVR_OBJECTS) 
    $(CC) $(CFLAGS) $(PLATFORM) $(SVR_OBJECTS) -o svr 

clt: $(CLT_OBJECTS) 
    $(CC) $(CFLAGS) $(PLATFORM) $(CLT_OBJECTS) -o clt 

clean: 
    rm -f clt svr *.o *~ 

# -------------- DEPENDENCIES --------------------- 
server.o: server.h 
client.o: client.h 
test_svr.o: test_svr.c 
test_clt.o: test_clt.c 
cltsvr_ults.o: cltsvr_ults.h 

svr.o:  server.h cltsvr_ults.h test_svr.c 
clt.o:  client.h cltsvr_ults.h test_clt.c 

Répondre

5

La seule suggestion que je voudrais faire est de compter sur les règles par défaut. OIEau, si vous écrivez simplement:

 
CFLAGS := -ggdb -Wall -pthread -std=c89 
CPPFLAGS := -DLINUX 
LOADLIBES := -lpthread 
CC := gcc 
all: svr clt 
svr: $(SVR_OBJECTS) 
clt: $(CLT_OBJECTS) 
...snip... 

sans écrire explicitement une règle pour SVR, alors (gnumake) va générer la règle correcte. Cependant, cela peut ne pas être portable dans toutes les différentes saveurs de marque. Si c'est un problème, il vaut mieux utiliser automake. (En d'autres termes, ne vous inquiétez pas de rendre la portabilité sauf si vous devez, mais si vous devez vous ne voulez pas écrire votre Makefile à la main.) Notez que vous devez utiliser LOADLIBES au lieu de LIBS pour obtenir la règle par défaut pour toi.

+0

Encore mieux utiliser LDLIBS au lieu de LOADLIBES .. par paul smith https://lists.gnu.org/archive/html/help-make/2005-01/msg00063.html – UpAndAdam

Questions connexes