嵌入式杂谈之makefile补充
我看了下自己的文章库存,好像还没有一篇关于Makefile的文章,所以这篇刚好可以弥补自己的缺失。
makefile预定义变量
预定义变量即系统自带的变量
预定义变量 | 作用 |
---|---|
AR | 库文件维护程序的名称,默认为ar |
AS | 汇编程序的名称,默认为as |
CC | c编译器的名称,默认为cc |
CXX | c++编译器的名称,默认为g++ |
ARFLAGS | 库文件维护程序选项,无默认值 |
ASFLAGS | 汇编程序选项,无默认值 |
CFLAGS | c编译器选项,无默认值 |
CXXFLAGS | c++编译器选项,无默认值 |
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文件不止一个文件解决方案
多个makefile文件,互相嵌套
使用伪目标
make all
makefile环境变量
普通变量导出以后即为环境变量
一般要求环境变量大写
,普通变量小写
使用export 变量名
进行导出
使用环境变量 环境变量类似于工程中所有makefile之间共享的全局变量
定义一个环境变量会影响到工程中的其他makefile文件,因此小心使用
普通变量只在当前文件起作用
makefile本身自带的环境变量 例如上面提到的预定义变量
执行make
命令的传参操作也相当于传入了一个环境变量(优先级最高,可以覆盖原来makefile文件中定义的变量值)
makefile通配符
符号 | 作用 |
---|---|
* | 若干个任意字符 |
? | 一个任意字符 |
[] | 将中括号中字符依次进行匹配,不加空格 |
%
表示任意字符,与*相似,但%
一般只用于规则描述中,所以又称为规则通配符
===========
PS:想加入技术群的同学,加了我好友后,就给我发「篮球的大肚子」这句话,有可能机器人打瞌睡,可以多发几次,不要发与技术无关的消息或者推广。
如果想获取学习资料,就在公众号后台回复「1024」,足够多的学习资料可以让你学习。
嵌入式杂谈之makefile补充相关推荐
- linux驱动日志格式,( 转)嵌入式Linux驱动Makefile
天气: 晴朗 心情: 高兴 ( 转)嵌入式Linux驱动开发笔记 1.1 模块的编译 Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式.简单的例子, Be ...
- windows kernel 可以直接读写文件系统资料吗_嵌入式杂谈之文件系统
作者:于宙 , 经授权转载:编辑略作调整: 文件系统可以说是嵌入式中绕不开的一大块内容.之前我对文件系统认知一直停留在在U盘格式的理解上,直到接触了嵌入式Linux才发现这里面大有文章,以Linux启 ...
- arm 交叉编译找不到so_嵌入式杂谈之交叉编译
这次扯一下嵌入式开发过程中经常用到的交叉编译器,虽说在之前的文章也提到过这个问题,不过上次是着重介绍为什么使用交叉编译器(主要是为了劝服自己从单片机的思想中脱离出来,慢慢的接受嵌入式Linux开发的一 ...
- 嵌入式杂谈之文件系统
文件系统可以说是嵌入式中的一大块,也是绕不过的一部分.之前我对文件系统认知一直停留在在U盘格式的理解上,直到接触了嵌入式Linux才发现这里面大有文章,以Linux启动挂载根文件系统为 ...
- 嵌入式杂谈之中断向量表
虽说接触了好久的单片机或者说嵌入式开发,不过对于有些概念还是比较模糊,因此此系列将会从一些零碎的小知识点出发,慢慢的遍历整张嵌入式开发的地图. 这次先来看一下中断向量表. 至于为什么会提到中断向量表, ...
- 适合嵌入式的C++开源项目-Workflow
在来腾讯之前,我是没有真正用C++开发过一个完整的项目的,然后,赶鸭子上架,鹅厂的人特别喜欢用C++,而且用的特别好.我这次推荐一个开源的C++项目,希望喜欢C++,或者想往C++方向发展的同学可以看 ...
- shell和Makefile
shell介绍 shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式 (2)我们可以使用shell和操作系统,uboot等软件系 ...
- linux下c 编译脚本,Linux下编译C语言与makefile脚本语言
GCC 1.Source CRT 软件:可以控制linux的终端. 2.FileZilla 软件: windows 远程传文件到linux. 使用sourceinsight 文本编辑器 一linux编 ...
- 嵌入式三级知识点、错题总结
一-05:数字(电子)文本 Unicode编码:用于计算机统一处理.存储和传输.其编码方案常用的有两种:UTF-8和UTF-16 这种编码方式与国标的GB18030.GB2312并不完全相同,大多数汉 ...
最新文章
- kvm虚拟化技术下虚拟机磁盘的数据保护
- spingboot和mybatis,纯注解方式
- python2发送http不编码_[转]Python 2.x中常见字符编码和解码方面的错误及其解决办法...
- Ubuntu装机后的基础应用
- MySQL查询执行的基础——查询优化处理
- word格式:导出与导入(如何将一套格式样式应用于另一个文档)- 教程篇
- C#的多线程机制探索3
- Laravel服务提供者在平台短信服务中的应用
- golang(7 方法重写)
- java方法里面能改定时器的时间吗_Kafka 时间轮的原理和实现
- Android入门基础教程1
- 【简单易上手】姓氏头像制作生成头像组合微信小程序源码下载
- 7000字爆肝!我把14个自学编程的压箱底网站全部分享给你们啦
- 旭元数艺:只争朝夕 不负韶华
- Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)
- Java学习---day14_集合框架03
- Mysql出现问题:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)解决方案
- 使用element回到顶部组件报错“Error: target is not existed: .page-component__scroll .el-scrollbar__wrap“
- Angular4简介
- 网络安全菜鸟学习之漏洞篇——逻辑漏洞(二)
热门文章
- 判断该网页是在什么设备打开。
- Win10 IIS本地部署网站运行时图片和样式不正常?
- C#中跨窗体操作(1)--事件
- 街舞中的rolling机器人_REMEMBER街舞培训中心2020年元旦汇演
- python3.5.2使用教程_Python3.5.2-初级教程.docx
- python自带的解释器叫做_python学习
- mysql读写分离_MySQL基于amoeba读写分离实验
- vue router传参_新手使用vue-router传参时注意事项
- springboot怎么杀进程_线上服务平均响应时间太长,怎么排查?
- 线性判别结合源码分析LDA原理