2016-11-05 16 views
0

私は初めてmakefileを使用しています。同時に2つのファイルを実行したいと思います。これはサーバーとクライアントのファイルで、すべてのファイルにはメインのファイルがあり、2つのファイルは互いに通信します。今まで私は以下のMakefileを書いています。GNU Makefile 2つのファイルの並列実行

all: server client 

server: server.c 
     gcc server.c -o server 
     ./server 

client: client.c 
     gcc client.c -o client 
     ./client 

だから私は最初にサーバを起動して、クライアントが後でそれに接続できるようにします。そして、これは私の問題です。 メイクファイルを実行すると、サーバだけが起動します。一度に1つのファイルだけではなく、サーバーの直後にクライアントを直接起動することは可能ですか?

+2

'-j'フラグと並行してビルドするには' make'と言ってみましたか? – larsks

+2

おそらく、*および*バイナリをコンパイルするためにMakefileを使用しないでしょうが、 '\ t./server&\ n./client&\ n'を含む新しいルールを"実行 "することはできますか? – Evert

+0

'Make -p'を試してから' Makefile'に 'CC = gcc'と' CFLAGS = -g -Wall'を追加してください。 –

答えて

3

それは、(例えば、自動化された回帰テストを実行している以外。)のMakefileからのビルドと実行の両方のプログラムにしようとするのは非常に珍しいです

通常、あなたがして、コードを実行し、makeを実行します。個人的には、別の端末ウィンドウでサーバを起動し、最初のクライアントでクライアントを実行します。

しかし、あなたがMakefileのからこれを行うにはしたくない場合、あなたは次のことを試みることができる:

all: server client run 

server: server.c 
    gcc server.c -o server 

client: client.c 
    gcc client.c -o client 

run: 
    ./server & 
    ./client 
    killall server 

最後の行は、クライアントが終了した後、サーバーをオフに殺します。これは、サーバーがそれ自体をシャットダウンする他の手段を持っている場合は必要ではないかもしれませんが、そうでない場合は、多くのサーバープロセスのコピーが作成されます。

テストを実行するために、別のシェルスクリプトを書くほうが簡単かもしれません。

+1

よろしくお願いします。私は通常の方法でmakefileで実行しないことに決めました。 – hiaslosch17

関連する問題