Лучшая практика при написании Makefile - PullRequest
1 голос
/ 19 января 2010

gcc 4.4.2 c89

Я написал этот Makefile. Мне интересно, это хороший дизайн и прост в обслуживании?

Я думаю о том, что cltsvr_ults.o связан как с SVR_OBJECTS, так и с CLT_OBJECTS. Это выглядит правильно?

Большое спасибо за любые предложения,

# ------------- 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

1 Ответ

5 голосов
/ 19 января 2010

Единственное, что я хотел бы сделать, - это полагаться на правила по умолчанию.Итак, если вы просто напишите:

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

без явного написания правила для svr, то (gnumake) сгенерирует правильное правило.Тем не менее, это не может быть портативным для всех различных ароматов.Если это проблема, вам гораздо лучше использовать automake.(Другими словами, не беспокойтесь о переносимости Make, если вы не обязаны, но если вам нужно, вы не хотите писать свой Makefile вручную.) Обратите внимание, что вы должны использовать LOADLIBES вместо LIBS, чтобы заставить работать правило по умолчаниюдля тебя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...