Makefile拆分编写
在实际开发项目中,我们通常将一个工程划分为多个文件夹,每个文件夹代表不能的功能,如:我的一个项目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拆分编写的更多相关文章
- 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤
一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...
- Linux Makefile文件编写详细步骤与实践
Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...
- 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 < ...
- makefile的编写规则
2. 编写makefile 示例: test:main.o func.o gcc -o test main.o func.o func.o:func.c gcc -c func.c mai ...
- 一个简单的makefile文件编写
下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...
- Android系统开发(3)——Makefile的编写
Makefile是什么? makefile的作用: 1.project文件组织,编译成复杂的程序 2.安装及卸载我们的程序 Makefile使用演示样例 在/home/username/makefil ...
- 一个通用Makefile的编写
作者:杨老师,华清远见嵌入式学院讲师. 我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件.如果我们用gcc去一个一个编译每一个源文件的 ...
- Makefile简单编写实例
介绍一下Makefile的简单编写例子. 编写Makefile的规则就是: 目标文件:依赖文件 (tab)编译规则 现在我有一个文件目录结构为: 解释一下这几个文件.首先我创建makefile目录,底 ...
- 转:SYNOPSYS VCS Makefile文件编写与研究
SYNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明:mak ...
随机推荐
- iOS_开发中引导页的设置及代码
在iOS 手机App 软件的开发中, 基本上每一个完整的App 都有与之相对应的引导页的设置,引导页也会有很多种设置的方式,根据不同的情况,选择不同的编码,在这里,我分享一下自己关于引导页的一些看法和 ...
- μC/OS-Ⅲ系统的时间管理函数和定时器
一.时间管理函数 μC/OS-Ⅲ系统提供一些列时间管理服务函数: 1.OSTimeDly():任务延时n个时钟节拍. 2.OSTimeDlyHMSM():任务延时指定的时间,采用“时:分:秒:毫秒”方 ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- textbox只能输入数字或中文的常用正则表达式和验证方法
验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9 ...
- android 加载中、无网络、无数据、出错 四种状态的代码封装
package com.weavey.loading.lib;import android.content.Context;import android.content.res.TypedArray; ...
- Asp.net MVC 路由基础
路由检测插件RouteDebugger.dll web.config里<appSettings>节点内添加<add key="RouteDebugger:Enabled&q ...
- SQL简单语法
(1)select SELECT 列名称 FROM 表名称 (2)distinct SELECT DISTINCT 列名称 FROM 表名称 SELECT * FROM 表名称 (3)where SE ...
- TypeScript Handbook 2——接口1(翻译)
接口(Interfaces) One of TypeScript's core principles is that type-checking focuses on the 'shape' that ...
- liunx 下 部署并运行java项目(非web)
1. 将这三个包上传到liunx上,之后写一个run.sh 的脚本文件,然后在lib包中上传包<sunjce-provider.jar>包. 2.启动run.sh( ./run.sh st ...
- Python开发入门与实战17-新浪云部署
17. 新浪云部署 上一章节我们介绍了如何在本地windows服务器部署python django的网站,本章我们简要说明一下如何把python django工程部署到云服务上. 本章章节我们描述如何 ...