【发布时间】:2009-08-23 18:11:57
【问题描述】:
我有一个名为 project 的目录。
它包含两个名为client 和server 的子目录,以及一个名为Makefile 的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
但不是很满意。我确定我想做的事情真的很简单,应该有一些方便的方法来做这件事。那我该怎么做呢?
【问题讨论】:
标签: makefile subdirectory