Makefile 同时生成两个可执行程序

最近正在写一些zmq的C++程序。经常需要写类似于g++ XX.cpp -o XX -lzmq,写的次数多了 觉得太麻烦,于是写了个Makefile文件,先上代码

 1 CFILE = $(wildcard ./*.c)

 2 CPP_FILE = $(wildcard ./*.cpp)

 3 

 4 OBJ_DIR = ./obj

 5 

 6 O_C = $(patsubst ./%.c, $(OBJ_DIR)/%.o, $(CFILE))

 7 O_CPP = $(patsubst ./%.cpp, $(OBJ_DIR)/%.o, $(CPP_FILE))

 8 O_SRC = $(O_C) $(O_CPP)

 9 

10 SERVER_SRC = server.cpp

11 CLIENT_SRC = client.cpp

12 

13 TARGET_DIR = .

14 TARGET_CLIENT = $(TARGET_DIR)/Client

15 TARGET_SERVER = $(TARGET_DIR)/Server

16 

17 TARGETS = $(TARGET_CLIENT) $(TARGET_SERVER)

18 

19 CC = cc

20 GCC = gcc

21 GXX = g++

22 

23 CPP_FLAGS = -g -Wall

24 LIB_NAME = -lzmq

25 

26 FLAGS = $(LIB_NAME)

27 

28 all : $(TARGETS)

29 

30 $(TARGET_CLIENT) : $(O_SRC)

31     @if [ ! -e $(TARGET_DIR) ]; then \

32         mkdir -p $(TARGET_DIR); \

33     fi

34     $(GXX) -o $@ $(CLIENT_SRC) $(FLAGS) 

35 

36 $(TARGET_SERVER) : $(O_SRC)

37     @if [ ! -e $(TARGET_DIR) ]; then \

38         mkdir -p $(TARGET_DIR); \

39     fi

40     $(GXX) -o $@ $(SERVER_SRC) $(FLAGS) 

41 

42 $(OBJ_DIR)/%.o : %.cpp

43     @if [ ! -e $(OBJ_DIR) ]; then \

44         mkdir -p $(OBJ_DIR); \

45     fi

46     $(GXX) $(CPP_FLAGS) $(FLAGS) -c $< -o $@

 

挺麻烦的,还是弄了一个多小时,主要参考了几个东西,wilcard,patsubst,$@,$< 这几个符号弄明白了就差不离了。

从第28行开始

all : $(TARGETS)

代表了我这个程序的所有输出就是TARGETS变量,而这个变量包含两个,一个是Client,一个是Server。 没错!就是因为写通讯一个客户端一个服务器端,一次生成两个可执行程序爽歪歪。

 

引用了一些参考资料,附链接如下:

Makefile中的wildcard用法

http://blog.csdn.net/liangkaiming/article/details/6267357

makefile 中 $@ $^ %< 使用

http://blog.csdn.net/kesaihao862/article/details/7332528

你可能感兴趣的:(makefile)