我有一个名为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 both
server/server.cand
client/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
但对它不是很满意。我确定我想做的事情真的很简单,应该有一些方便的方法来做这件事。那么我该怎么做呢?