我有一个名为project.
client它包含两个名为and的子目录server和一个名为Makefile.
client并server分别获得了名为client.c和的源文件server.c。
对于属于该目录的源,我在子目录中没有任何单独的 makefile。所有构建都由单个 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 bothserver/server.candclient/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
但对它不是很满意。我确定我想做的事情真的很简单,应该有一些方便的方法来做这件事。那么我该怎么做呢?