在实际开发项目中,我们通常将一个工程划分为多个文件夹,每个文件夹代表不能的功能,如:我的一个项目cpl,它分为两个文件夹:src和test。当在cpl文件夹中运行make的时候,它的一级目录都会自动运行各自文件夹中的Makefile,cpl文件夹中的Makefile需要定义一些编译变量,如:包含的库,编译标志。这些变量需要通过export命令导出至子级Makefile文件中,如下:

CC = g++
INCLUDE = $(shell pwd)/src
CFLAGS = -I $(INCLUDE) -ggdb -Wall -Wextra -Werror --std=c++11
LIBS = -lpthread -lgtest
export

子级test文件夹makefile内容如下:

../test_graph.o:test_graph.cpp ${INCLUDE}/graph.h libgtest.a
@echo ${INCLUDE}
$(CC) -c $< -o $@ $(CFLAGS) $(LIBS)

子级src文件夹makefile内容如下:

../graph.o:graph.cpp graph.h
$(CC) -c $< -o $@ $(CFLAGS)

在上面的Makefile中,INCLUDE变量当通过{}引用为数组格式,()引用只读取第一个元素。$@为引用编译目标(target),$<引用依靠列表(dependent list)。对象文件输出至上一级文件夹,当然也可以输出至对应的目标文件夹。

整个cpl文件夹中的Makefile文件列表如下:

CC = g++
INCLUDE = $(shell pwd)/src
CFLAGS = -I $(INCLUDE) -ggdb -Wall -Wextra -Werror --std=c++11
LIBS = -lpthread -lgtest
export subdirs := $(shell find * -maxdepth 0 -type d)
objects := $(wildcard *.o) subdirs:
for dir in $(subdirs); do \
$(MAKE) -C $$dir; \
done all: main main:$(objects)
@echo ${objects}
$(CC) $(CFLAGS) ${objects} $(LIBS) -o $@ .PHONY: clean clean:
rm *.o
rm main

当输入make时,自动编译所有子目录的makefile,这样就实现了拆分编译。

Makefile拆分编写的更多相关文章

  1. 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤

    一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...

  2. Linux Makefile文件编写详细步骤与实践

    Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

  3. C、C++的Makefile的编写以及动、静态库的制作调用(包括MAC地址的获取及MD5加密)

    一.C代码 静态库 四个.h.c文件 add.h #ifndef ADD_H #define ADD_H int add(int a,int b); #endif add.c #include < ...

  4. makefile的编写规则

    2.       编写makefile 示例: test:main.o func.o gcc -o test main.o func.o func.o:func.c gcc -c func.c mai ...

  5. 一个简单的makefile文件编写

    下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...

  6. Android系统开发(3)——Makefile的编写

    Makefile是什么? makefile的作用: 1.project文件组织,编译成复杂的程序 2.安装及卸载我们的程序 Makefile使用演示样例 在/home/username/makefil ...

  7. 一个通用Makefile的编写

    作者:杨老师,华清远见嵌入式学院讲师. 我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件.如果我们用gcc去一个一个编译每一个源文件的 ...

  8. Makefile简单编写实例

    介绍一下Makefile的简单编写例子. 编写Makefile的规则就是: 目标文件:依赖文件 (tab)编译规则 现在我有一个文件目录结构为: 解释一下这几个文件.首先我创建makefile目录,底 ...

  9. 转:SYNOPSYS VCS Makefile文件编写与研究

    SYNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明:mak ...

随机推荐

  1. ionic单页面应用中微信分享的问题总结

    首先说一下 ionic 是单页面应用,也就是说整个项目就有一个index.html, 那么问题就就来了, 如果我们不同的页面要分享给大家的是不同的链接和图片,应该怎么去做呢? 这就是我们今天要总结的东 ...

  2. python datetime处理时间

    原文:http://blog.csdn.net/JGood/article/details/5457284 Python提供了多个内置模块用于操作日期时间,像calendar,time,datetim ...

  3. Python3学习(一)-基础、数据类型、变量、字符串和编码、list&tuple、if、for、while、dict、set、函数与参数

    ##廖雪峰py3笔记 ## '//'这是获得相除后的整数部分 ##a = 10//3 ##print (a) ## '/'获得相除后的结果,为浮点数,结果能整除也也是浮点数 ##b = 10/3 ## ...

  4. OpenCV中的矩阵操作

    函数 Description 说明 cvAdd Elementwise addition of two arrays 两个数组对应元素的和 cvAddS Elementwise addition of ...

  5. java基础之 多态

    在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言 ...

  6. post和get请求

    get请求:不安全,参数在url地址中的参数的长度不能大于1024字节 post请求:安全,参数都是凤凰族昂在data里的,参数长度不限

  7. Outlook查找未读邮件

    1.查找新邮件的未读邮件,可以在下图中查找 2.恢复已删除邮件,如果邮件是未读邮件,在上图中是查找不到,只能通过视图去查找 步骤2内容摘自百度

  8. 微软MVP衣明志告诉你,小白全方位攻略,逆袭互联网达人

    技术专家们的起步之路是不尽相同的,今天我们要介绍的衣明志老师就是一个从普通游戏爱好者修炼成的技术大咖.尽管当时遇到了不少的困难,但是努力坚持自己解决问题让衣明志老师在技术之路上有了自己的特点. 我们先 ...

  9. js的异常捕获

    try{ ...some code... }catch(e){ ...some code... //处理错误 throw(e.name); //抛出异常 }finally{<BR> // ...

  10. SWFUpload - JQuery上传插件

    首先,大家可以去SWF的官网下载相关Demo或者源码. 官方地址:http://code.google.com/p/swfupload/ 官方Demo:http://demo.swfupload.or ...