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
答案 0 :(得分:5)
我要做的唯一建议就是依赖默认规则。 IOW,如果你只是写:
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 portability,但是如果你不想手动编写Makefile,那么请注意你必须使用LOADLIBES而不是LIBS来使默认规则起作用对你而言。