TARGETS = client server
CL_OBJ = clientMain.o Controller.o UI.o List.o Movie.o Server.o Serializer.o
SV_OBJ = serverMain.o ServerControl.o Storage.o List.o Movie.o Serializer.o
server: $(SV_OBJ) Connection.o
g++ -o server $(SV_OBJ) Connection.o
client: $(CL_OBJ) Connection.o
g++ -o client $(CL_OBJ) Connection.o
clientMain.o: clientMain.cc
g++ -c clientMain.cc
serverMain.o: serverMain.cc
g++ -c serverMain.cc
Controller.o: Controller.cc Controller.h
g++ -c Controller.cc
UI.o: UI.cc UI.h
g++ -c UI.cc
List.o: List.cc List.h
g++ -c List.cc
Movie.o: Movie.cc Movie.h Data.h
g++ -c Movie.cc
Server.o: Server.cc Server.h Movie.h Data.h
g++ -c Server.cc
Storage.o: Storage.cc Storage.h Movie.h Data.h
g++ -c Storage.cc
ServerControl.o: ServerControl.cc ServerControl.h Data.h
g++ -c ServerControl.cc
Serializer.o: Serializer.cc Serializer.h
g++ -c Serializer.cc
clean:
rm -f $(CL_OBJ) $(SV_OBJ) client server
这个makefile只生成服务器可执行文件而不是客户端文件。它可能位于客户端目标之前的顶部,因为如果它使用服务器目标切换位置,它会生成客户端文件。我不确定是什么罪魁祸首,非常感谢你的帮助。
答案 0 :(得分:1)
默认情况下,Make始终在makefile中构建第一个目标,而仅该目标。如果您运行make client
,则会构建client
。
或者你可以引入一个新的目标作为第一个,这取决于你通常想要建立的目标;在server
目标添加之前:
.PHONY: all
all: server client
答案 1 :(得分:1)
您只需在开头添加虚拟目标:
all: $(TARGETS)
当您自己键入all
(即未指定目标)时,这将使make
成为默认目标,这将导致客户端和服务器都被构建。