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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值