make文件中可能出错(UBuntu)

时间:2014-03-20 14:49:31

标签: ubuntu makefile g++

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只生成服务器可执行文件而不是客户端文件。它可能位于客户端目标之前的顶部,因为如果它使用服务器目标切换位置,它会生成客户端文件。我不确定是什么罪魁祸首,非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

默认情况下,Make始终在makefile中构建第一个目标,而该目标。如果您运行make client,则会构建client

或者你可以引入一个新的目标作为第一个,这取决于你通常想要建立的目标;在server目标添加之前:

.PHONY: all
all: server client

答案 1 :(得分:1)

您只需在开头添加虚拟目标:

all: $(TARGETS)

当您自己键入all(即未指定目标)时,这将使make成为默认目标,这将导致客户端和服务器都被构建。