2016-04-02 9 views
0

現在、私は共有メモリ経由でIPCを使用したクライアントサーバープログラムを実行していますが、これをmakeで実行すると少し問題があります。サーバーを実行し、3つのクライアントを1つのmakeターゲットで同時に実行したいのですが、 2つのターゲットで動作します。誰かがこれで私を助けることができますか?ありがとう!ここでMakefile - サーバーの後に同時にクライアントを実行するには?

私の作品コード:

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

+0

これはGNU Make 4.1を使って私にとってはうまくいきます。 2つのターゲットで動作すると言えば、2つのクライアント(client1とclient2)、またはサーバーと1つのクライアントで動作することを意味しますか? –

+0

'run:run_c1 run_c2 run_c3'を実行して' make run -j4'を実行する前に、2回(サーバ用とクライアント用)に2回作っていますが、サーバが実行するため正しく動作しませんそのクライアントプロセスの前に必ず実行されるとは限りません –

+0

しかし、2つのクライアントを同時に実行できますか?あなたはどのOSを実行しており、どのブランドのものを作っていますか?私は問題がMakefileにあるとは思わない。 –

答えて

1

クライアントまたはサーバの実装を変更することなく、この作品を作るために、我々は、サーバーがすることを想定する必要があります

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でそれを実行します:一定時間内に準備ができて、2秒を言います。クライアントごとにrun_serverに依存することにより、クライアントのターゲットは、スリープ状態でサーバを起動している間にrun_serverターゲットと並行して実行されません。

その他のオプションは、クライアントが数秒間何度も繰り返し試行したり、バックグラウンドにフォークして接続を受け入れる準備ができたときに終了させたりします(その後、Makefileからバックグラウンドで実行しないでください) 。

+0

ご協力いただきありがとうございます!それは非常にうまくいく! –

関連する問題