为2个目标创建一个makefile

ant*_*009 1 makefile

gcc 4.4.1 C99

我正在创建客户端服务器应用程序.

我有一个编译所有文件的Makefile.但是,我想创建2个目标(二进制文件),一个名为clt和svr.并希望Makefile为它们创建2个单独的目录,称为./client和./server?

到目前为止,我已经对我的Makefile做了这个.这只会创造svr.我不确定如何为要创建的客户端添加第二个目标.

希望你理解我的观点?

非常感谢任何建议,

OBJECT_FILES = server.o client.o cltsvr_ults.o

CFLAGS = -ggdb -Wall -pthread

LIBS = -lpthread

CC = gcc

svr: $(OBJECT_FILES)
    $(CC) $(CFLAGS) $(OBJECT_FILES) $(LIBS) -o svr

client.o: client.c cltsvr_ults.h
    $(CC) -c client.c

server.o: server.c cltsvr_ults.h
    $(CC) -c server.c

cltsvr_ults.o: cltsvr_ults.c
    $(CC) -c cltsvr_ults.c

clean:
    rm svr *.o *~
Run Code Online (Sandbox Code Playgroud)

Bet*_*eta 6

你还没有解释如何制作clt,对象是什么.svr的对象列表看起来很奇怪 - 它应该真的有client.o吗?我将假设clt由client2.o和cltcvr_ults.o组成.这个makefile应该做你想要的,包括制作目录:

SVR_OBJECT_FILES = server.o client.o cltsvr_ults.o
CLT_OBJECT_FILES = client2.o cltsvr_ults.o  

CFLAGS = -ggdb -Wall -pthread
LIBS = -lpthread 
CC = gcc  

all: client/clt server/svr
client/clt: $(CLT_OBJECT_FILES) 
server/svr: $(SVR_OBJECT_FILES)  

client/clt server/svr:
    @mkdir -p $(dir $@)
    $(CC) $(CFLAGS) $^ $(LIBS) -o $@  

client.o client2.o server.o: cltsvr_ults.h  

%.o: %.c
    $(CC) -c $<  

clean: 
    rm -f client/clt server/svr *.o *~ 

  • 哦来吧Pavel,Makefile是代码,就像脚本一样.说"这个Makefile做X"真是太糟糕了,而不是"这个makefile casuses make to do X"? (5认同)