asterisk1.8 Makefile分析 (1)
为了观查Makefile的输出,可以对Makefile做如下修改。
1. 将PRINT_DIR和NOISY_BUILD这两个变量置为yes。
2. 修改Makefile.rules,将ECHO_PREFIX和CMD_PREFIX的赋值都去掉。
3. 将以下关键目标的命令前@符号都去掉。
makeopts.embed_rules
$(MOD_SUBDIRS_EMBED_LDSCRIPT)
$(MOD_SUBDIRS_EMBED_LDFLAGS)
$(MOD_SUBDIRS_EMBED_LIBS)
$(MOD_SUBDIRS)
$(OTHER_SUBDIRS)
整个Makefile的第一个目标是 all,也是此Makefile的默认目标并且它是一个伪目标。
all: _all
从这句可以看到,all的依赖是_all,再看_all
_all: .lastclean makeopts $(SUBDIRS) doc/core-en_US.xml
可以看到_all由多个目标组成,这也是Makefile多目标的常用写法。
下面分别分析这些目标:
1. .lastclean不用管,解压asterisk源码包就有这个文件。
2. makeopts也不用管,在执行configure后会自动生成这个文件。这个目标可能是用来检测configure文件的,但 configure有错或者不存在时会停止编译。这句话在makefile里可以看到,如下
makeopts: configure
@echo "****"
@echo "**** The configure script must be executed before running '$(MAKE)'."
@echo "**** Please run \"./configure\"."
@echo "****"
@exit 1
3. $(SUBDIRS)
将$(SUBDIRS)展开如下:
SUBDIRS:=$(OTHER_SUBDIRS) $(MOD_SUBDIRS)
MOD_SUBDIRS:=channels pbx apps codecs formats cdr cel bridges funcs tests main res addons
OTHER_SUBDIRS:=utils agi
从上面那个名称可以看出,这些都是asterisk的子目录,应该是去分别执行这些字目录下的makefile文件。
下面我们先看看$(SUBDIRS)的依赖目标
在makefile里查询这个目标的依赖如下:
$(SUBDIRS): main/version.c include/asterisk/version.h include/asterisk/build.h include/asterisk/buildopts.h defaults.h makeopts.embed_rules
可以看到目录$(SUBDIRS)由上面n个目标组成,以下分别分析:
1) main/version.c
查找makefile,这个目标由以下语句生成:
main/version.c: FORCE .lastclean
@build_tools/make_version_c > $@.tmp
@cmp -s $@.tmp $@ || mv $@.tmp $@
@rm -f $@.tmp
2) include/asterisk/version.h
查找makefile,这个目标由以下语句生成:
include/asterisk/version.h: FORCE .lastclean
@build_tools/make_version_h > $@.tmp
@cmp -s $@.tmp $@ || mv $@.tmp $@
@rm -f $@.tmp
3) include/asterisk/build.h
查找makefile,这个目标由以下语句生成:
include/asterisk/build.h: .lastclean
@build_tools/make_build_h > $@
4) include/asterisk/buildopts.h
查找makefile,这个目标由以下语句生成:
include/asterisk/buildopts.h: menuselect.makeopts .lastclean
@build_tools/make_buildopts_h > $@.tmp
@cmp -s $@.tmp $@ || mv $@.tmp $@
@rm -f $@.tmp
5) defaults.h
查找makefile,这个目标由以下语句生成:
defaults.h: makeopts .lastclean
@build_tools/make_defaults_h > $@.tmp
@cmp -s $@.tmp $@ || mv $@.tmp $@
@rm -f $@.tmp
6) makeopts.embed_rules
查找makefile,这个目标由以下语句生成:
makeopts.embed_rules: menuselect.makeopts
@echo "Generating embedded module rules ..."
@rm -f $@
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDSCRIPT)
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDFLAGS)
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LIBS)
可以看出这个目标依赖于menuselect.makeopts
4) doc/core-en_US.xml
这个目标看makefile里说明,是用于生成文档的,应该没什么用,不管他。
接下来我们主要分析menuselect.makeopts
asterisk1.8 Makefile分析 (1)相关推荐
- asterisk1.8 Makefile分析 (2)
menuselect.makeopts分析 查找makefile,这个目录的依赖关系如下: menuselect.makeopts: menuselect/menuselect menusele ...
- Linux内核移植之一:内核源码结构与Makefile分析
内容来自 韦东山<嵌入式Linux应用开发完全手册> 一.内核介绍 1.版本及其特点 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如下面几行它们构成了Linu ...
- u-boot分析之makefile分析(二)
目录 u-boot(二)makefile 引入 目录结构(1.1.6) 配置文件 目标 配置具体的单板 编译阶段 过程 链接入口 配置链接地址 附录 附录A:mkconfig解析 附录B 链接脚本 u ...
- 操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析
山东大学操作系统课设lab1 实验一 NACHOS试验环境准备.安装与MAKEFILE分析(lab1) 实验环境: 分析记录: 1. 准备虚拟机下LINUX宿主操作系统环境 2. NACHOS实验代码 ...
- u-boot的Makefile分析
U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*. U-BOOT的下载地址: http://source ...
- uboot源码——主Makefile分析
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.配置编译初体验 1.uboot来源于官方(uboot官网下载),或者SoC官方(研发s5pv210芯片的公司推出的开发板,SMDKV21 ...
- 1.3 nuclei sdk Makefile分析
nuclei sdk Makefile分析 Make 命令 1. 根目录Makefile 2. 源码选择application/baremetal/helloworld Makefile如下 3. 分 ...
- USB摄像头驱动--LCD显示摄像头图像(附Makefile分析)
对于一个应用程序,最重要的是明白目的是什么:将摄像头的数据解析出来,按一帧一个图片的方式将数据传到LCD的Framebuffer中去(如果LCD没有自动将Framebuffer中的数据刷到LCD上还需 ...
- 开发板与虚拟机组网、uboot源码makefile分析、uboot安全启动与非安全启动方式、uboot源码配置与编译流程、制作TF启动盘
开发板与虚拟机组网. 局面:开发板.PC(Ubuntu系统).网线直连PC:设置Ubuntu系统:1.设置桥接模式,桥接到PC的有线网卡上:2.手动配置IP V4的地址信息,注意和开发板保持在同一网段 ...
最新文章
- .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)...
- “笨方法”学习Python笔记(1)-Windows下的准备
- 音视频技术开发周刊 | 239
- MKL学习——数学运算库安装调试
- com 组件调用不起来_AwesomeGithub组件化探索之旅
- 【经典回放】多种语言系列数据结构算法:归并排序
- [css] 使用css画出一个五角星
- hdu 1505 City Game
- SpringMVC系列(十四)Spring MVC的运行流程
- java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E...
- postman如何模拟Map参数请求呢?
- 做程序员要有“疯子精神”,中国开源开放的科创人才要如何培养?
- 阿里云专家带你揭秘云计算数据底座——对象存储
- 【java】 jsp网页表单数据跨页面传递
- [图像处理] Matlab 获取实时图像和导入视频图像
- [白话解析] 深入浅出极大似然估计 极大后验概率估计
- 《计算机网络》笔记摘抄汇总
- 非线性规划:实例与matlab应用
- ubuntu--制作图标
- [SilkyBible] XviD系列-9
热门文章
- sevlet 注释initparams_servlet3.0注解配置学习笔记
- 力扣Java解数独_LeetCode 力扣 37. 解数独
- postgresql查询mysql库_postgresql 查看数据库,表,索引,表空间以及大小
- Python -- 三元表达式(三目运算符)
- 扩展 KMP(模板) 洛谷P5410
- 小程序返回上一页并传参
- bzoj4380[POI2015]Myjnie dp
- python selenium T3
- 我的iOS学习历程 - OC第九天
- [翻译] 学习iOS开发的建议:如何从菜鸟到专家