| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 嵌入式Linux应用开发(二)——Makefile引入 -> 正文阅读 |
|
[系统运维]嵌入式Linux应用开发(二)——Makefile引入 |
文章目录一、Makefile的引入Makefile的介绍:Makefile是一个编译辅助器,并不是编译器。它只是提供辅助我们进行编译的一个工具。就像一个Shell脚本一样来通过执行一些命令,来实现某些操作。 Makefile的引入:在Linux没有像我们的Windows上比如VS,CLion,等这些方便的图形化编译软件,那我们怎么编译呢?在Linux上我们通过命令行
来对文件进行编译,但是我们在这个过程中发现,如果文件很多,而且我们还需要多次编译来进行调试,那岂不是要敲这样的指令很多次,岂不是麻烦的要死。正因如此,Makefile就诞生了。 展示这是两个非常简单的代码a.c b.c
b.c
编译结果结果分析上面的警告可以不用管,这个指令的过程是编译a.c 和b.c生成 一个build的可执行文件。a调用了b的函数,所以生成了这个build实际上是在编译a.c 和 b.c的时候,生成了a.o和b.o最后通过链接才生成了可执行文件build。可以通过指令(对这个过程不懂的,推荐去看一下(一)) 二、Makefile的使用相信通过上面的介绍,你对Makefile也有了一个清晰的认识,至少当别人问起你的时候,你能清楚的向他人介绍起Makefile。那么下面我们就开始对Makefile的使用进行分析 1.Makefile的规则Makefile的规则可以归纳为如下
链接生成 而依赖文件a.o通过
编译生成 依赖文件b.o通过
编译生成 因此我们可以简单的写出一个Makefile如下
在Linux上运行一下 Makefile的原理:通过比较目标文件和依赖文件的时间,如果目标文件不存在,表明需要对文件进行编译,生成新的文件。如果依赖文件进行了修改,表明需要重新编译依赖文件。(比如a.c进行了修改,那么通过比较a.o和a.c的最后修改时间发现,a.c比a.o新,所以我们就需要重新编译一下a.c。自然a.o更新了,build同理也要更新。但是b.c,b.o从始至终都没有更新过,所以他们两个自然就不需要进行再次编译)这就是Makefile的工作原理 2.Makefile的语法对于嵌入式应用开发来说,我们只需要掌握基本的Makefile操作就行,下面我们就对Makefile的基本语法进行分析。 2.1 通配符 %对比上面的Makefile,我们可以进行如下的修改,同时也添加了c.c
Makefile
运行结果: 2.2 假想目标 .PHONY为什么需要假想目标呢?
然后在终端上执行如下 但是,此时你想如果文件内已经有这个clean文件了怎么办?他还会执行吗?如下 为了解决这样的一个文件,我们就需要使用假想目标,只需要更改一下代码,如下
结果 2.3 变量A:=xxxx (表示的是这是一个即时变量,就是说这个值已经确定) ?= (表示延时变量,区别是只会在第一次定义时才会起作用,如果前已经定义了,就忽略掉) += (表示附加,类型取决于前面是怎么定义的,验证如实验二) 实验一
运行结果: 实验二
运行结果: 3.Makefile函数对于Makefile函数下面主要介绍4个函数。对于函数不熟悉,建议参考文档 3.1 $foreach()函数$(foreach f , $(A), $(f) . o) 3.2 $filter()函数$ (filter %/, $?) 3.3 $filter-out()函数
(
f
i
l
t
e
r
?
o
u
t
(filter-out %/,
(filter?out?) 3.4 $wildcard()函数$(wildcard *.c) 3.5 $patsubst()函数$ (patsubst %.c ,%.d, $(file2)) Makefile代码:
总结希望上面的介绍和实验对你了解熟悉Makefile能有帮助! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 2:43:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |