4、第四部分

(1)

oname = ${patsubst %.c,%.o,${patsubst %.S,%.o,$(1)}}

自定义函数,$(1)表示调用oname这个函数的第一个参数,patsubst是make内置函数,即模式字符串替换函数。

oname函数实现的功能是:

  将第一个参数中符合%.s模式的替换成%.o

  再继续将上述结果中符合%.c模式的替换成%.o

  也就是把所有 .s 和 .c文件名替换成 .o文件名

  这个函数的功能就是计算源文件名(c源文件,汇编源文件)所相对应的目标文件名(经过编译汇编后的文件)。

CONTIKI_OBJECTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(CONTIKI_SOURCEFILES)}}

PROJECT_OBJECTFILES = ${addprefix $(OBJECTDIR)/,${call oname, $(PROJECT_SOURCEFILES)}}

定义CONTIKI_OBJECTFILES变量

  首先用oname函数,将CONTIKI_SOURCEFILES所对应的源文件名,改为目标文件名,如process.c将会变为process.o

  再在文件名前边加上前缀$(OBJECTDIR)/,前边我们知道这个变量为obj_native,故process.c会变为obj_native/process.o

  这个变量应该是代表即将生成的Contiki操作系统目标文件名

定义PROJECT_OBJECTFILES变量

  功能同上

  这个变量应该是代表即将生成的项目中目标文件名

  PROJECT_SOURCEFILES这个变量为空,所以PROJECT_OBJECTFILES也为空。

# Provide way to create $(OBJECTDIR) if it has been removed by make clean
$(OBJECTDIR):
mkdir $@

$@是自动化变量,表示规则中的目标文件集。我们知道OBJECTDIR为obj_native,所以$@为obj_native。

mkdir $@生成obj_native目录。

但是这个依赖关系链,怎么会涉及到obj_native的?

调试了一下:

aaarticlea/png;base64,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" alt="" />

在生成CONTIKI_OBJECTFILES所代表的文件时,目录不存在,会先找依赖关系生成目录,再生成具体文件。

所以mkdir obj_native会被执行。

(2)

ifdef APPS
APPDS = ${wildcard ${foreach DIR, $(APPDIRS), ${addprefix $(DIR)/, $(APPS)}}} \
${wildcard ${addprefix $(CONTIKI)/apps/, $(APPS)} \
${addprefix $(CONTIKI)/platform/$(TARGET)/apps/, $(APPS)} \
$(APPS)}
APPINCLUDES = ${foreach APP, $(APPS), ${wildcard ${foreach DIR, $(APPDS), $(DIR)/Makefile.$(APP)}}}
-include $(APPINCLUDES)
APP_SOURCES = ${foreach APP, $(APPS), $($(APP)_src)}
DSC_SOURCES = ${foreach APP, $(APPS), $($(APP)_dsc)}
CONTIKI_SOURCEFILES += $(APP_SOURCES) $(DSC_SOURCES)
endif

 The project's makefile can also define in the APPS variable a list of applications from the apps/ directory that should be included in the Contiki system.

hello-world这个例子没有定义APPS变量,故这段不会执行。

我们假设定义了APPS变量,其值为APPS += antelope unit-test

相关知识点:

wildcard函数: 返回所有符合pattern的文件名,以空格隔开

$(wildcard pattern)

The argument pattern is a file name pattern, typically containing wildcard
characters (as in shell file name patterns). The result of wildcard is a
space-separated list of the names of existing files that match the pattern.

foreach函数:

The syntax of the foreach function is:
$(foreach var,list,text)
The first two arguments, var and list, are expanded before anything else is done; note that
the last argument, text, is not expanded at the same time. Then for each word of the
expanded value of list, the variable named by the expanded value of var is set to that word,
and text is expanded. Presumably text contains references to that variable, so its expansion
will be different each time.
The result is that text is expanded as many times as there are whitespace-separated
words in list. The multiple expansions of text are concatenated, with spaces between them,
to make the result of foreach.

每次从list中取出一个词(空格分隔),赋给var变量,然后text(一般有var变量)被拓展开来。

只要list中还有空格分隔符就会一直循环下去,每一次text返回的结果都会以空格分隔开。

${wildcard ${foreach DIR, $(APPDIRS), ${addprefix $(DIR)/, $(APPS)}}}

先分析${foreach DIR, $(APPDIRS), ${addprefix $(DIR)/, $(APPS)}}

其中DIR是变量(var)$(APPDIRS)列表(list),这个例子中没有定义APPDIRS这个变量,估计是用于定义除了$CONTIKI/apps/之外的apps目录。

${addprefix $(DIR)/, $(APPS)}是text。我们假设定义了APPDIRS为a b。

那么第一次:DIR 会被赋值为a,${addprefix $(DIR)/, $(APPS)},又我们假定APPS为antelope unit-test,所以最终会被拓展为a/antelope  a/unit-test。

     DIR 会被赋值为b,${addprefix $(DIR)/, $(APPS)}又我们假定APPS为antelope unit-test,所以最终会被拓展为b/antelope  b/unit-test

最终这两次结果会以空格分隔开,即a/antelope  a/unit-test b/antelope  b/unit-test

${wildcard a/antelope  a/unit-test b/antelope  b/unit-test} 返回空,因为找不到符合这样的目录。

所以最终这句语句,实现的功能是,返回$APPDIRS目录中,所有符合$APPS的目录。

${wildcard ${addprefix $(CONTIKI)/apps/, $(APPS)}

这句语句返回$(CONTIKI)/apps/目录下所有符合$APPS的目录,即contiki-release-2-7/apps/antelope contiki-release-2-7/apps/unit-test

${addprefix $(CONTIKI)/platform/$(TARGET)/apps/, $(APPS)}

这句语句返回$(CONTIKI)/platform/$(TARGET)/apps/目录下所有$APPS的目录,即contiki-release-2-7/platform/native/apps/antelope contiki-release-2-7/platform/native/apps/unit-test。

在contiki-release-2-7/platform/native目录下,并没有apps目录,后边有差错处理机制

aaarticlea/png;base64,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" alt="" />

$(APPS)

在当前目录下的所有$APPS目录,即antelope unit-test。

在hello-world例子中,并没有这些目录。

aaarticlea/png;base64,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" alt="" />

所以APPDS变量是包含所有与$APPS有关的目录。

APPINCLUDES变量是所有需要导入的APP Makefile文件。

在所有APPDS目录下,所有Makefile.$(APPS)文件。

在我们的假设条件APPS = antelope unit-testAPPDIRS =

只会导入contiki-release-2-7/apps/antelope/Makefile.antelope contiki-release-2-7/apps/unit-test/Makefile.unit-test

其余的均不存在,所以在include指令前要有符号-,即出错继续执行后续指令。

contiki-release-2-7/apps/antelope/Makefile.antelope

aaarticlea/png;base64,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" alt="" />

分别定义了两个变量,antelope_src用于保存antelope这个app的src文件,antelope_dsc用于保存antelope这个app的dsc文件。

contiki-release-2-7/apps/unit-test/Makefile.unit-test

aaarticlea/png;base64,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" alt="" />

分别定义了两个变量,unit-test_src用于保存unit-test这个app的src文件,unit-tes_dsc用于保存unit-test这个app的dsc文件。

变量APP_SOURCES

  APP_SOURCES = ${foreach APP, $(APPS), $($(APP)_src)}

取出所有APPS中的src文件变量,这个例子是$(antelope_src) 和$(unit-test_src)

变量APP_SOURCES

  DSC_SOURCES = ${foreach APP, $(APPS), $($(APP)_dsc)}

取出所有APPS中的dsc文件变量,这个例子是$(antelope_dsc) 和$(unit-test_dsc)

  CONTIKI_SOURCEFILES += $(APP_SOURCES) $(DSC_SOURCES)

这段话的最终目的:

将$APPS相关的所有源文件添加进CONTIKI_SOURCEFILES变量中。

(3)

target_makefile := $(wildcard $(CONTIKI)/platform/$(TARGET)/Makefile.$(TARGET) ${foreach TDIR, $(TARGETDIRS), $(TDIR)/$(TARGET)/Makefile.$(TARGET)})

# Check if the target makefile exists, and create the object directory if necessary.
ifeq ($(strip $(target_makefile)),)
${error The target platform "$(TARGET)" does not exist (maybe it was misspelled?)}
else
ifneq (1, ${words $(target_makefile)})
${error More than one TARGET Makefile found: $(target_makefile)}
endif
include $(target_makefile)
endif

这断代码主要做的就是,找到在所有TAGET目录下找到符合的Makefile.$(TARGET)文件,放到target_makefile变量中。

再检查是否存在或者重复。并做相应的错误提示信息。

${error The target platform "$(TARGET)" does not exist (maybe it was misspelled?)}

${error More than one TARGET Makefile found: $(target_makefile)}

我们这个例子中 TARGET = native 并且 TARGETDIRS为空

所以最后会导入$(CONTIKI)/platform/native/Makefile.native

接下去要开始分析target和cpu的makefile文件了。

Contiki 2.7 Makefile 文件(五)的更多相关文章

  1. Contiki 2.7 Makefile 文件(六)

    5.第五部分 ifndef CONTIKI $(error CONTIKI not defined! You must specify where CONTIKI resides!) endif if ...

  2. Contiki 2.7 Makefile 文件(四)

    3.第三部分 这里我们假设TARGET为native (1) OBJECTDIR = obj_$(TARGET) LOWERCASE = -abcdefghijklmnopqrstuvwxyz UPP ...

  3. Contiki 2.7 Makefile 文件(三)

    2.第二部分 这里的usage,targets,savetarget,savedefines都是伪目标. 和all不同,这些伪目标不会被执行,除非显式指定这些目标. 这里有两个目标savetarget ...

  4. Contiki 2.7 Makefile 文件(二)

    二.Makefile.include 1.第一部分 (1) ifndef CONTIKI ${error CONTIKI not defined! You must specify where Con ...

  5. Contiki 2.7 Makefile 文件(一)

    一.主控Makefile 这里以hello-world例子为主线,从其工程Makefile开始,解析整个build过程.

  6. 第五课 Makefile文件的制作(补充)

    序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点 ...

  7. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

  8. linux下使用automake工具自动生成makefile文件

    linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...

  9. linux中Makefile文件相关内容

    第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...

随机推荐

  1. bbed初体验

    bbed能够直接查看或改动数据文件.听起来非常强大,以下体验一下,安装方法网上一搜一大把,我的环境是centos+10G的 bbed參考文档:http://pan.baidu.com/s/1hqCC6 ...

  2. JAVA_Could not find property [struts.actionMapping]怎么办

    你的项目中不包含log4j.jar这个文件,包含进去即可

  3. 转:css:Position

    http://www.cnblogs.com/polk6/archive/2013/07/26/3214847.html http://blog.sina.com.cn/s/blog_4bcf4a5e ...

  4. wait和notify实现的生产者消费者线程交互

    public class ProductTest { public static void main(String args[]) { Repertory repertory=new Repertor ...

  5. vim 处理换行符

    1. 设置文件格式 :set fileformats=unix,dos 2. 查询当前文件格式 :set fileformat? 3. 转换文件格式 :set fileformat=dos 4. 设置 ...

  6. C与C++在形參的一点小差别

    先看一下以下的代码: int fun(a,b) int a; int b; { return 10; } void main(int argc, char ** argv) { fun(10); re ...

  7. python etree解析xml

    # -*- coding:utf-8 -*- #conding:utf-8 __author__ = 'hdfs' ''' 简洁 高效 明了 ElementTree轻量级的 Python 式的 API ...

  8. session 购物车

    package session; import java.io.IOException;import java.util.ArrayList;import java.util.List; import ...

  9. 认识 service worker

    离线缓存可以提升用户体验,可以节省网络资源,但是,浏览器对资源缓存和自定义网络请求的控制一直不够完善,service worker 的出现就是为了解决这些问题 它可以解决目前离线应用的问题,同时也可以 ...

  10. C打印函数printf的一种实现原理简要分析

    [0]README 0.1)本文旨在对 printf 的 某一种 实现 原理进行分析,做了解之用: 0.2) vsprintf 和 printf.c 的源码,参见 https://github.com ...