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 [email protected] $(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 [email protected] $(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 [email protected]

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

从第28行开始

all : $(TARGETS)

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

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

Makefile中的wildcard用法

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

makefile 中 [email protected] $^ %< 使用

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

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

时间: 2024-10-20 08:10:38

Makefile 同时生成两个可执行程序的相关文章

eclipse 创建Makefile工程生成多个执行文件

1.创建Makefile工程 2.创建inc src Debug 目录 用于存放头文件源文件 3.编写Makefile 需要在有源文件的目标天剑Makefile文件,如下给出一个生成两个target的模板 ###################################### # ####################################### #source file #源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件 SOURCE := $(wildcar

Makefile自动生成工具-----autotools的使用(详细)

相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用.很多GNULinux的的软件都是用它生成Makefile的,包括我们非常熟悉的Linux内核源代码. 1.准备: 需要工具 autoscan aclocal autoheader automake autoconf auto make 在终端敲入命令,哪个没有安装哪个,一般是第一个autoscan没有,其它的我用的Ubuntu10.04下全部都有

CROSS JOIN连接用于生成两张表的笛卡尔集

将两张表的情况全部列举出来 结果表: 列= 原表列数相加 行= 原表行数相乘 CROSS JOIN连接用于生成两张表的笛卡尔集. 在sql中cross join的使用: 1.返回的记录数为两个表的记录数乘积. 2.将A表的所有行分别与B表的所有行进行连接. 例如: tableA r1 r2 A B C D tableB r3 r4 1 2 3 4 select * from tableA cross join tableB; return: r1 r2 r3 r4 r1 r2 1 2 r1 r2

Makefile自动生成头文件依赖

前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖. CC = gcc CFLAGS = -Wall -O INCLUDEFLAGS = LDFLAGS = OBJS = seq.o TARGETS = test_seq .PHONY:all all : $(TARGETS) test_seq:test_seq.o $(OBJS) $(CC) -o

生成两位随机数

编写脚本生成2位的随机数,要求个位和十位数不能相同,如果遇到个位和十位相同的就退出脚本,注意十位数不能为0 count=0while truedo    num=$((RANDOM%100))    if ((((num/10))==0))    then        continue    else        if ((((num%10))==((num/10))))        then            break        else            echo num

随机生成两个数的四则运算

Github项目地址: https://github.com/123diandian/sizeyunsuan PSP: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 20 Estimate 估计这个任务需要多少时间 1440 2200 Development 开发 700 200 Analysis 需求分析 (包括学习新技术) 180 100 Design Spec 生成设计文档 5 5 Desi

Makefile 自动生成头文件的依赖关系 .

最近在看一本书<Windows游戏编程大师技巧> (Tricks of Windows Game Programming Gurus). 第一章给出了一个打砖块小游戏的示例程序. 包括三个文件: blackbox.h, blackbox.cpp和freakout.cpp (600行代码, 对于Windows C++程序来说还好, 没有让我freak out…). blackbox.cpp封装了部分DirectDraw, 提供了一些更傻瓜化的初始化DirectDraw, 画点, 画方框的工具函数

C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!

序 在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现很难做到,只发现有个类似的智能生成工具autotools,但是操作比较麻烦,奔着“一人学习,大家共享”的原则,手动写了一个工具类,帮助自己和大家生成现成的c或者cpp框架. 代码比较简单,希望我们能一起改善下. git路径:https://github.com/chuanshanjia/ccpp/blob/ma

linux makefile自动生成

一.Linux Makefile介绍 Linux Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Linux Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件. Linux Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件.当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块. Linux Makefile的