为了观查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)相关推荐

  1. asterisk1.8 Makefile分析 (2)

    menuselect.makeopts分析 查找makefile,这个目录的依赖关系如下: menuselect.makeopts: menuselect/menuselect    menusele ...

  2. Linux内核移植之一:内核源码结构与Makefile分析

    内容来自 韦东山<嵌入式Linux应用开发完全手册> 一.内核介绍 1.版本及其特点 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如下面几行它们构成了Linu ...

  3. u-boot分析之makefile分析(二)

    目录 u-boot(二)makefile 引入 目录结构(1.1.6) 配置文件 目标 配置具体的单板 编译阶段 过程 链接入口 配置链接地址 附录 附录A:mkconfig解析 附录B 链接脚本 u ...

  4. 操作系统课设--NACHOS试验环境准备、安装与MAKEFILE分析

    山东大学操作系统课设lab1 实验一 NACHOS试验环境准备.安装与MAKEFILE分析(lab1) 实验环境: 分析记录: 1. 准备虚拟机下LINUX宿主操作系统环境 2. NACHOS实验代码 ...

  5. u-boot的Makefile分析

    U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*. U-BOOT的下载地址: http://source ...

  6. uboot源码——主Makefile分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.配置编译初体验 1.uboot来源于官方(uboot官网下载),或者SoC官方(研发s5pv210芯片的公司推出的开发板,SMDKV21 ...

  7. 1.3 nuclei sdk Makefile分析

    nuclei sdk Makefile分析 Make 命令 1. 根目录Makefile 2. 源码选择application/baremetal/helloworld Makefile如下 3. 分 ...

  8. USB摄像头驱动--LCD显示摄像头图像(附Makefile分析)

    对于一个应用程序,最重要的是明白目的是什么:将摄像头的数据解析出来,按一帧一个图片的方式将数据传到LCD的Framebuffer中去(如果LCD没有自动将Framebuffer中的数据刷到LCD上还需 ...

  9. 开发板与虚拟机组网、uboot源码makefile分析、uboot安全启动与非安全启动方式、uboot源码配置与编译流程、制作TF启动盘

    开发板与虚拟机组网. 局面:开发板.PC(Ubuntu系统).网线直连PC:设置Ubuntu系统:1.设置桥接模式,桥接到PC的有线网卡上:2.手动配置IP V4的地址信息,注意和开发板保持在同一网段 ...

最新文章

  1. .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)...
  2. “笨方法”学习Python笔记(1)-Windows下的准备
  3. 音视频技术开发周刊 | 239
  4. MKL学习——数学运算库安装调试
  5. com 组件调用不起来_AwesomeGithub组件化探索之旅
  6. 【经典回放】多种语言系列数据结构算法:归并排序
  7. [css] 使用css画出一个五角星
  8. hdu 1505 City Game
  9. SpringMVC系列(十四)Spring MVC的运行流程
  10. java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E...
  11. postman如何模拟Map参数请求呢?
  12. 做程序员要有“疯子精神”,中国开源开放的科创人才要如何培养?
  13. 阿里云专家带你揭秘云计算数据底座——对象存储
  14. 【java】 jsp网页表单数据跨页面传递
  15. [图像处理] Matlab 获取实时图像和导入视频图像
  16. [白话解析] 深入浅出极大似然估计 极大后验概率估计
  17. 《计算机网络》笔记摘抄汇总
  18. 非线性规划:实例与matlab应用
  19. ubuntu--制作图标
  20. [SilkyBible] XviD系列-9

热门文章

  1. sevlet 注释initparams_servlet3.0注解配置学习笔记
  2. 力扣Java解数独_LeetCode 力扣 37. 解数独
  3. postgresql查询mysql库_postgresql 查看数据库,表,索引,表空间以及大小
  4. Python -- 三元表达式(三目运算符)
  5. 扩展 KMP(模板) 洛谷P5410
  6. 小程序返回上一页并传参
  7. bzoj4380[POI2015]Myjnie dp
  8. python selenium T3
  9. 我的iOS学习历程 - OC第九天
  10. [翻译] 学习iOS开发的建议:如何从菜鸟到专家