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
Run Code Online (Sandbox Code Playgroud)
我要做的唯一建议是依赖默认规则.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来使默认规则起作用为了你.
| 归档时间: |
|
| 查看次数: |
2447 次 |
| 最近记录: |