というディレクトリがありproject
ます。
と という名前の 2 つのサブディレクトリとclient
、server
という名前のメイクファイルが含まれていMakefile
ます。
client
とはそれぞれとserver
という名前のソース ファイルを持っています。client.c
server.c
そのディレクトリに属するソースのサブディレクトリに個別のメイクファイルはありません。すべてのビルドは単一の makefile によって行われます。Makefile
コードは
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
今私は走っmake cnt
て、それは答えた
cc -W -Wall -g -pthread ./client/client.c -o ./client/client.out
make cnt
問題は、変更していないにもかかわらず、後続のすべてのコマンドが再度コンパイルされ、上記のテキストが出力されることです。./client/client.c
私はここで立ち往生しています。何をすべきかわからない。
私がやりたいことは次のとおりです。
- を使用して、その実行可能ファイルを
make cnt
コンパイルしてディレクトリに出力しますclient/client.c
client/
- を使用して、その実行可能ファイルを
make svr
コンパイルしてディレクトリに出力します。server/server.c
server/
- そして
make, compile both
server/server.cand
client/client.c` を使用して、実行可能ファイルをそれぞれのディレクトリに出力します
しかし、私は実行可能ファイルを呼び出していないので、私がsvr
抱えている問題は解決されていません。
./client/client.out
代わりにターゲットを変更してからcnt
呼び出すと、必要なものは問題ありませんが、端末make client/client.out
に長いコマンドを入力したくありませんmake client/client.out
私が得た回避策は次のとおりです
cnt: $(CLI)
cc $(FLAGS) $(CLI) -o cnt
cp cnt ./client/client.out
しかし、それだけでは満足できません。私がやりたいことは本当にシンプルで、それを回避する便利な方法があるはずです。では、どうすればそれを行うことができますか?