私はproject
というディレクトリを持っています。トップレベルのディレクトリにあるMakefileの問題、サブディレクトリのソース
client
とserver
という2つのサブディレクトリと、Makefile
というメイクファイルがあります。
client
およびserver
にはそれぞれclient.c
およびserver.c
というソースファイルがあります。
私は、そのディレクトリに属するソースのサブディレクトリに別個のメイクファイルを持っていません。すべてのビルドは単一のmakefileで行います。 Makefile
コードは、今、私はmake cnt
を実行し、それが問題はそれ以降のすべてのmake cnt
のコマンドは、私が変更していないよにもかかわらず、再びそれをコンパイルし、上記のテキストを出力して終了です
cc -W -Wall -g -pthread ./client/client.c -o ./client/client.out
を答えた
FLAGS = -W -Wall -g -pthread
SERV =./server/server.c #My server code
CLI =./client/client.c #My client code
build:svr cnt
svr: $(SERV)
cc $(FLAGS) $(SERV) -o ./server/server.out
cnt: $(CLI)
cc $(FLAGS) $(CLI) -o ./client/client.out
です./client/client.c
私はここにいます。何をすべきかわからない。私が何をしたいか
は次のとおりです。make cnt
で
- 、
make svr
でclient/
ディレクトリ - で
client/client.c
と出力にその実行可能ファイルをコンパイルし、server/
ディレクトリ内server/server.c
と出力にその実行可能ファイルをコンパイルします。 - そして
make, compile both
サーバー/ server.cand
クライアント/ client.c`と出力とのそれぞれのディレクトリでの実行ファイル
しかし、私はsvr
と呼ばれる任意の実行可能ファイルを持っていると `私は問題をCNTないので持つことは解決されない。
私は./client/client.out
代わりのcnt
にターゲットを変更してmake client/client.out
を呼び出した場合、それは私が必要とするまさに、大丈夫だと思うが、私は私の端末で長いコマンドmake client/client.out
を入力する必要はありません
私が持っている回避策次のようになります。
cnt: $(CLI)
cc $(FLAGS) $(CLI) -o cnt
cp cnt ./client/client.out
しかし、それにはあまり満足していません。私がやりたいことは本当にシンプルで、それを実行するのに便利な方法があるはずです。だから私はどうすればいいのですか?
ありがとうございます。 – nagre