Contiki 2.7 Makefile 文件(三)

Contiki 2.7 Makefile 文件(三)

大家好,又见面了,我是全栈君。

2、第二部分

Contiki 2.7 Makefile 文件(三)

这里的usage,targets,savetarget,savedefines都是伪目标。

和all不同,这些伪目标不会被执行,除非显式指定这些目标。

这里有两个目标savetarget,savedefines前边我们提过。

 

通过命令 make TARGET=esb savetarget可以保存默认的TARGET到Makefile.target中。

通过命令 make TARGET=esb DEFINES=MYTRACE,MYVALUE=4711 savedefines 可以保存默认的DEFINES到Makefile.$(TARGET).DEFINES中。

 

先准备一些预备知识,GNU的make工作的执行步骤:

1、读入所有的Makefile

2、读入被include的其他Makefile

3、初始化文件中的变量

4、推导隐晦规则,并分析所有规则

5、为所有目标文件创建依赖关系链

6、根据依赖关系,决定哪些目标要重新生成

7、执行生成命令

 

执行make TARGET=esb savetarget命令时:

1、先读入所有Makefile(包括include的Makefile),初始化所有变量(TARGET=esb)

2、推导规则,创建依赖关系,这里是伪目标,故只执行savetarget后边的命令

savetarget: -@rm -f Makefile.target @echo "saving Makefile.target" @echo >Makefile.target "TARGET = $(TARGET)"

含义:

第一句命令:强行删除文件Makefile.target,出错时继续执行后续命令(-符号的作用)

注:@符号的作用,是指这个命令不被显示出来

第二句命令:显示 “saving Makefile.target”提示信息

第三句命令:将 “TARGET = $(TARGET)” 重定向到文件Makefile.target,即保存默认的TARGET到文件Makefile.target文件中

Contiki 2.7 Makefile 文件(三)

可以看到TARGET = esb 被保存到文件Makefile.target中。

这里有个错误提示,make:msp430-gcc:Command not found

Contiki 2.7 Makefile 文件(三)

注:Ubuntu里编辑,这张图一直显示不了,这是在Cygwin64下

提示信息发生在读取完../../cpu/msp430/Makefile.msp430这个文件之后。esb平台是用msp430CPU的,故会导入Makefile.msp430。

这里是我的系统环境里边没有msp430-gcc引起的,但是为什么make TARGET=esb savetarget这个命令会使msp430-gcc执行,要具体看Makefile.msp430,不理。

 

执行make savetarget命令时:

因为没有显式定义TARGET变量,而且make的执行顺序是先初始化文件中变量,再根据依赖关系生成目标。

故TARGET会先被初始化为native(第一部分中的2),再保存到Makefile.target文件中

Contiki 2.7 Makefile 文件(三)

 

执行make TARGET=esb DEFINES=MYTRACE,MYVALUE=4711 savedefines命令时

1、先读入所有Makefile(包括include的Makefile),初始化所有变量(TARGET=esb,DEFINES=MYTRACE,MYVALUE=4711)

2、推导规则,创建依赖关系,这里是伪目标,故只执行savedefines后边的命令

savedefines: -@rm -f Makefile.$(TARGET).defines @echo "saving Makefile.$(TARGET).defines" @echo >Makefile.$(TARGET).defines "DEFINES = $(DEFINES)"

第一句命令:强行删除文件Makefile.($TARGET).defines,出错时继续执行后续命令(-符号的作用)

注:@符号的作用,是指这个命令不被显示出来

第二句命令:显示 “saving Makefile.($TARGET).defines”提示信息

第三句命令:将 “DEFINES = $(DEFINES)” 重定向到文件Makefile.($TARGET).defines,即保存默认的DEFINES到文件Makefile.($TARGET).defines文件中

Contiki 2.7 Makefile 文件(三)

可以看到DEFINES = MYTRACE,MYVALUE=4711被保存到Makefile.esb.defines文件中。

 

注:变量是先被初始化的,然后再根据依赖关系去生成目标。

 

执行make usage命令时:

usage: @echo "make MAKETARGETS... [TARGET=(TARGET)] [savetarget] [targets]"

usage是伪目标,只执行usage后边的命令。

输出 make MAKETARGETS… [TARGET=(TARGET)] [savetarget] [targets] 提示信息

告诉我们怎么用。

 

执行make targets命令时:

targets: @ls -1 $(CONTIKI)/platform $(TARGETDIRS) | grep -v CVS

targets是伪目标,只执行标号targets后边的命令。

这里的命令分为两条:

ls -1 $(CONTIKI)/platform $(TARGETDIRS)

grep -v CVS

其中ls的-1参数是list one file per line,$CONTIKI/platform目录为默认的平台目录

TARGETDIRS变量此处为空,我们也可以定义这个变量,保存我们自定义的平台目录

| 是管道,连接上个指令的标准输出,做为下个指令的标准输入。

grep -v CVS(select non-matching lines) 选择没有CVS的行(lines)。

不知道CVS是什么,先不理。

 

最终输出默认平台目录$(CONTIKI)/platform自定义平台目录$(TARGETDIRS)中,没有包含CVS的所有文件名。

Contiki 2.7 Makefile 文件(三)

Contiki 2.7 Makefile 文件(三)Contiki 2.7 Makefile 文件(三)

因为自定义平台目录$(TARGETDIRS)为空,所以只输出了默认平台目录$(CONTIKI)/platform下所有不包含CVS的文件名(list one file per line),看上边三个图。

转载于:https://www.cnblogs.com/songdechiu/p/6011792.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108814.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ie里面兼容性视图设置在哪_chrome兼容性视图设置在哪里

    ie里面兼容性视图设置在哪_chrome兼容性视图设置在哪里ie8的兼容性视图设置:是在计算机配置页面的Windows组件选项里面。北京时间2008年3月6日,微软发布了InternetExplorer8的第一个公开测试版本(beta1)。本次测试第一次包涵简体中文(3月27日推出)版本。测试版本仍然是在IE7的架构下改进的。界面除了做一些细微的调整,增加少许实用功能外,并无改进。beta1版本推出了模拟IE7的模式、增加了在线邮件浏览功能、提高了兼容性…

  • pycharm 最新激活码(JetBrains全家桶)[通俗易懂]

    (pycharm 最新激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • linux中pushd和popd用法,在Linux中使用pushd和popd命令操作目录的用法

    linux中pushd和popd用法,在Linux中使用pushd和popd命令操作目录的用法pushd将目录压入目录栈,进行目录切换命令用法:pushd[-n][+N|-N|dir]参数:+n切换目录,以当前目录为准,从右向左数第n个-n切换目录,以当前目录为准,从左向右数第n个例:复制代码代码如下:[root@localhostzhangy]#pushd/root~/home/zhangy#这个符号~代表根home目录复制代码代码如下:[root…

  • platform device driver

    platform device driverplatform总线是在linux2.6内核中加入的一种虚拟总线。platform机制有两部分组成platform_device和platform_driver.structplatform_device{   constchar   *name;   int      id;   structdevice   dev;   u32      num_resources;   structresource   *resource;};plat

  • 关于docker中执行docker命令的实践

    关于docker中执行docker命令的实践最近在制作给kubernetesjenkinsplugin调用的jenkinsslave(默认情况下,kubernetesjenkins插件使用的是jenkinsci/jnlp-slave)容器镜像,以供自动创建的pod使用。对这个镜像的需求是:希望在pod运行的容器内,执行docker命令,完成dockerbuild,push等一些操作,即dockerindocker。首先,需要在

  • 360企业版 修改服务器ip,360企业版快速安装部署图文教程「建议收藏」

    360企业版 修改服务器ip,360企业版快速安装部署图文教程「建议收藏」360企业版V5.0.6.1310官方最新版类型:服务器区大小:177.0M语言:中文评分:4.5标签:立即下载内容索引安装须知安装环境推荐全新安装控制中心旧版本升级安装控制中心配置控制中心1.360企业版有旧版本(基于C/S架构,点此下载)和新版本(基于B/S架构,点此下载)。用户可以选择继续使用旧版本(终端无数量限制,但版本不再更新,也不再添加新的产品功能);2.已有用户进行新旧版本升级时,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号