嵌入式杂谈之makefile补充

我看了下自己的文章库存,好像还没有一篇关于Makefile的文章,所以这篇刚好可以弥补自己的缺失。


makefile预定义变量

预定义变量即系统自带的变量

预定义变量作用
AR库文件维护程序的名称,默认为ar
AS汇编程序的名称,默认为as
CCc编译器的名称,默认为cc
CXXc++编译器的名称,默认为g++
ARFLAGS库文件维护程序选项,无默认值
ASFLAGS汇编程序选项,无默认值
CFLAGSc编译器选项,无默认值
CXXFLAGSc++编译器选项,无默认值

makefile自动变量

自动变量作用
$*不包含扩展名的目标文件名称
$<第一个依赖文件名称
$?所有时间戳比目标文件晚的依赖文件
$@目标文件的完整名称
$^所有不重复的依赖文件

最下面两个常用

makefile隐式规则

自动寻找.o文件对应的同名.c文件

不用指定生成.o文件的规则

相当于指定.o文件以后,会自动将同名.c文件进行编译

这在uboot以及linux kernel中是非常常见的

uboot以及linux kernel中经常出现include ···config.mk

这也相当于包含一个子makefile,虽然文件名不像,但可以把它当作一个makefile文件来看待,二者基本没有区别

引用其他makefile及makefile嵌套

包含:

include makefile文件名

相当于子makefile文件直接展开

嵌套:

subsystem:

cd subdir && $(MAKE)

等价于:

subsystem:

$(MAKE) -C subdir

上面两种写法效果相同

makefile管理命令

命令作用
-C dir读入指定目录下面的makefile
-f file读入当前目录下的file文件为nakefile
-i忽略所有命令执行错误
-I dir指定被包含的makefile所在目录

源文件过多的编译方案

makefile分开多文件或者分级

output文件不止一个文件解决方案

  1. 多个makefile文件,互相嵌套

  2. 使用伪目标 make all

makefile环境变量

  1. 普通变量导出以后即为环境变量

一般要求环境变量大写,普通变量小写

使用export 变量名进行导出

  1. 使用环境变量 环境变量类似于工程中所有makefile之间共享的全局变量

定义一个环境变量会影响到工程中的其他makefile文件,因此小心使用

普通变量只在当前文件起作用

  1. makefile本身自带的环境变量 例如上面提到的预定义变量

执行make命令的传参操作也相当于传入了一个环境变量(优先级最高,可以覆盖原来makefile文件中定义的变量值)

makefile通配符

符号作用
*若干个任意字符
一个任意字符
[]将中括号中字符依次进行匹配,不加空格

%表示任意字符,与*相似,但%一般只用于规则描述中,所以又称为规则通配符

===========

  

PS想加入技术群的同学,加了我好友后,就给我发「篮球的大肚子」这句话,有可能机器人打瞌睡,可以多发几次,不要发与技术无关的消息或者推广。

如果想获取学习资料,就在公众号后台回复「1024」,足够多的学习资料可以让你学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓9.0马达框架分析

前言最近需要将之前的一些驱动接口转为安卓标准接口&#xff0c;方便上层应用或者第三方应用去适配。这篇文章先从简单的马达框架入手进行讲解。正文整个马达框架比较简单&#xff0c;安卓官方已经帮我们实现了framework到HAL层&#xff0c;我们需要实现的就只有驱动层。这篇文…

PYQT4 Python GUI 编写与 打包.exe程序

工作中需要开发一个小工具&#xff0c;简单的UI界面可以很好的提高工具的实用性&#xff0c;由此开启了我的第一次GUI开发之旅&#xff0c;下面将自己学习的心得记录一下&#xff0c;也做为学习笔记吧&#xff01;&#xff01;&#xff01; 参考&#xff1a;http://www.qaulau.…

你知道嵌入式,那你看过这个吗?

大家好&#xff0c;因为最近各种原因&#xff0c;我身边的很多同事都转行摆地摊了&#xff0c;可能因为那是一份自由的职业&#xff0c;摆地摊可以从事的范围很广&#xff0c;也不用起早贪黑了&#xff0c;而且收入并不低。也是因为这样&#xff0c;很多嵌入式方面的岗位越来越…

mvc一对多模型表单的快速构建

功能需求描述 Q:在实际的开发中&#xff0c;经常会遇到一个模型中包含有多个条目的表单。如何将数据提交到后台&#xff1f; A: 以数组的形式提交到后台就Ok了(真的那么简单么&#xff0c;如果再嵌套一层呢&#xff1f;) A2&#xff1a;拆分多个模型&#xff0c;映射就没啥问题…

c语言中 if(x) 、if(0) 、if(1)

解释if 语句里面包含真和非真&#xff0c;但是如果我们没有写清楚真和非真的话&#xff0c;会如何呢&#xff1f;if(x)相当于if(x ! 0)如果是指针的话&#xff0c;相当于if(x ! NULL)而if(1)相当于if(1 ! 0)还有if(0)相当于if(0 ! 0)举个例子#include<stdio.h> int main(…

看Linus骂人,真解气

感受下Linus骂人的感觉吧&#xff0c; 这样你会觉得工作中遇到的那些不愉快就算个鸟事背景一个Linux主线的内核维护者提交了一份patch&#xff0c;并说明问题产生的原因是因为应用传的音频有问题。Linus回复如下你他娘的给老子闭嘴&#xff01;这是一个内核bug好不好&#xff0…

不就是要个30K的薪资,他还问我Nginx调优

我是一个运维“老鸟”&#xff0c;目前在到处找工作阶段。周三刚面试完一家公司&#xff0c;还是非常中意的公司。结果是我中意公司&#xff0c;公司不中意我&#xff0c;妥妥的黄了。面试完我才知道&#xff0c;Linux云计算工程师必须能精通20多个企业级服务器优化。我之前不是…

android导出apk文件_Android测试工具入门介绍(三)

介绍一款牛逼的测试框架Drozer&#xff0c;一款可以检测Android一些公共漏洞的工具&#xff08;可能远不止这些、还可以继续挖掘&#xff09;&#xff0c;还可以生成shellcode&#xff0c;进行安卓设备的远程exploit。附下载地址&#xff1a;https://github.com/mwrlabs/drozer…

bomb炸弹

今天看到的一个Linux shell命令&#xff0c;但是我先说下&#xff0c;这个命令是危险的&#xff0c;所以没事的时候不要随便执行&#xff0c;出现了各种危险不要怪我没有提前告诉你哈。DANGER!命令代码:(){ :|: & };:命令解析1:() 意思是定义了一个函数&#xff0c;这个函数…

kindle的xray怎么用_Xray简单使用教程

Xray简单使用教程0X00下载xray 为单文件二进制文件&#xff0c;无依赖&#xff0c;也无需安装&#xff0c;下载后直接使用。下载地址为&#xff1a;注意&#xff1a; 不要直接 clone 仓库&#xff0c;xray 并不开源&#xff0c;仓库内不含源代码&#xff0c;直接下载构建的二进…

文件方式实现完整的英文词频统计实例(9.27)

1.读入待分析的字符串 2.分解提取单词 3.计数字典 4.排除语法型词汇 5.排序 6.输出TOP(20) 文本代码如下&#xff1a; girlRemembering me, Discover and see All over the world, Shes known as a girl To those who a free, The mind shall be key Forgotten as the past Ca…

UNUSED参数,这个宏,很秀

前言你们有没有在写代码的时候&#xff0c;遇到有的参数&#xff0c;从函数体里面传进来&#xff0c;但是又用不上&#xff0c;所以就不引用&#xff0c;但是不引用&#xff0c;在编译的时候&#xff0c;就会提示错误。是不是很尴尬&#xff0c;我们不使用&#xff0c;并不是错…

利用Python对文件进行批量重命名——以图片文件为例

效果如下&#xff1a;0001号用户的第 i 张图片 代码&#xff1a; import osclass ImageRename():def __init__(self):self.path C:/Users/lbpeng/Desktop/test/chictopia2/images1/fashioninmysoul/fulldef rename(self):filelist os.listdir(self.path)totalnum len(fileli…

mysql双重分组没有值也要显示_mysql 统计数据,按照日期分组,把没有数据的日期也展示出来...

因为业务需求&#xff0c;要统计每天的新增用户并且要用折线图的方式展示。如果其中有一天没有新增用户的话&#xff0c;这一天就是空缺的&#xff0c;在绘制折线图的时候是不允许的&#xff0c;所有要求把没有数据的日期也要在图表显示。查询2019-01-10------2019-01-20日的新…

我一个专科生,还有未来吗?

今天分享一个星球里面的讨论你好&#xff0c;我加入这个星球也算比较久了在此之前也一直都是在观望&#xff0c;我是一个19年因为高考失利而没有选择复读的专科生&#xff0c;我选择的专业是嵌入式技术与应用&#xff0c;最近不知道为什么特别迷茫&#xff0c;在选择读专科之前…

mysql查询数据库第一条记录_SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...

Sqlserver 获取每组中的第一条记录在日常生活方面&#xff0c;我们经常需要记录一些操作&#xff0c;类似于日志的操作&#xff0c;最后的记录才是有效数据&#xff0c;而且可能它们属于不同的方面、功能下面&#xff0c;从数据库的术语来说&#xff0c;就是查找出每组中的一条…

Linux select/poll机制原理分析

转载一篇文章&#xff0c;讲解select和poll机制的&#xff0c;分享给大家。前言Read the fucking source code! --By 鲁迅A picture is worth a thousand words. --By 高尔基1. 概述Linux系统在访问设备的时候&#xff0c;存在以下几种IO模型&#xff1a;Blocking IO Model&am…

SSM框架的搭建学习(1)---MyBatis的环境搭建

SSM(SpringSpringMVCMyBatis)框架为当今最为流行的WEB开发框架之一,基本上涉及数据库的一些增删改查操作都可以借用此框架,本尊此前接的一个小公司关于楼宇空调监控指标的项目就是基于此框架,只不过当时框架已经被别人搭建好,只等我去添砖加瓦,并没有从头开始对此框架进行着手搭…

argv python 提示输入_Python解释器

一、Python解释器我们编写的Python代码都要放在Python解释器上运行&#xff0c;解释器是代码与计算机硬件之间的软件逻辑层。当我们在操作系统上安装好Python之后&#xff0c;它就包含了保证Python运行的最小化组件&#xff1a;解释器 和 标准库。根据选用的Python版本的不同&a…

高阶篇:8.1)开模前评审及提交资料;

本章目的&#xff1a;明确开模前需要提交的资料&#xff0c;确保开模一次性成功。 在现有机械行业制作技术的大环境下&#xff0c;除却必要的机加工零件之外&#xff0c;大部分的零件量产都需要开模制作。如塑胶、钣金、压铸、粉末冶金、锻造等。 但是模具是很贵的&#xff08;…