Makefile - 如何在服务器之后并发运行客户端?

时间:2016-04-02 16:11:31

标签: c linux shell makefile

目前,我通过共享内存使用IPC进行客户端 - 服务器程序,使用make运行时我遇到一些问题,我想运行服务器并同时运行3个客户端只有一个make目标但不起作用但有2个目标,它的工作原理。有人可以帮我弄这个吗?谢谢!

这里的代码对我有用:

OPT_GCC = -std=c99 -Wall -Wextra
#compiler options and libraries for Linux
OPT = -D_XOPEN_SOURCE=700
LIB = -lrt -lpthread

CLIENTS = 3
MFLAGS = -j$(CLIENTS)

all: client server

client: mediasharingclient.c
    gcc $(OPT_GCC) $(OPT) -o client mediasharingclient.c $(LIB)

server: mediasharingserver.c
    gcc $(OPT_GCC) $(OPT) -o server mediasharingserver.c $(LIB)

run_server: server
   ./server ../sample1/send-order.txt&

run_clients: client1 client2 client3

client1:
    ./client 1 client1

client2:
    ./client 2 client2

client3:
    ./client 3 client3

clean:
   rm -f client server

我这样做:make run_servermake run_clients -j3

1 个答案:

答案 0 :(得分:1)

要在不更改客户端或服务器实现的情况下完成此工作,我们必须假设服务器将在固定时间内准备就绪,比如2秒:

OPT_GCC = -std=c99 -Wall -Wextra
#compiler options and libraries for Linux
OPT = -D_XOPEN_SOURCE=700
LIB = -lrt -lpthread

all: client server

client: mediasharingclient.c
    gcc $(OPT_GCC) $(OPT) -o client mediasharingclient.c $(LIB)

server: mediasharingserver.c
    gcc $(OPT_GCC) $(OPT) -o server mediasharingserver.c $(LIB)

run_server: server
    ./server ../sample1/send-order.txt &
    sleep 2

run_clients: client1 client2 client3

client1: client run_server
    ./client 1 client1

client2: client run_server
    ./client 2 client2

client3: client run_server
    ./client 3 client3

clean:
    rm -f client server

并使用make -j run_clients运行它。每个客户端对run_server的依赖性可确保客户端目标在睡眠和启动服务器时不与run_server目标并行运行。

其他选项是让客户端重复尝试几秒钟,或让服务器分叉到后台并在准备好接受连接时终止(然后不要在Makefile的后台运行它)。