从0学Linux驱动-Makefile详解5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0学Linux驱动-Makefile详解5相关的知识,希望对你有一定的参考价值。

参考技术A 作者网站: https://blog.csdn.net/daocaokafei/article/details/108513929

Makefile会执行3遍
第一次时KERNELRELEASE为空,所以先执行
KDIR,PWD的赋值操作
$(shell uname -r)表示执行shell uname -r 相当于执行shell脚本uname -r
shell pwd 相当于 pwd
all:表示指令标签,上图中一共有两个指令标签all和clean。
注意的是标签指令后面紧紧跟着TAB键,这是Makefile的规则

通过“M=”在Makefile中搜索

-C 后面跟path to kernel src 其中/lib/modules/5.4.0-87-generic/build 表示内核源程序

使用$(info "")打印LOG

Linux下Makefile详解

或许很多Winodws 的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和 professional 的程序员,makefile 还是要懂。在Linux 下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完 成大型工程的能力。
    makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系 列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。
    makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
下面就来看如何写Makefile文件:
Makefile文件编写规范:

目标:依赖文件                               
 $^  代表所有依赖文件
 $@  代表所有目标文件
 $<  代表第一个依赖文件
 %   代表通配符
 @指令:屏蔽指令
定义变量(变量大写)
变量名=值1 值2 ...
使用变量 $(变量名)


下来看事例:
假设我们有很多个文件(fun1.c fun2.c fun3.c main.h)
假设最后我们就想得到main一个文件
初级版:

.PHONY : clean

main : fun1.o fun2.o fun3.o main.o
    gcc -g fun1.o fun2.o fun3.o main.o -o main
fun1.o : fun1.c main.h
    gcc -Wall -c -g -o fun1.o
fun2.o : fun2.c main.h
    gcc -Wall -c -g -o fun2.o
fun3.o : fun3.c main.h
    gcc -Wall -c -g -o fun3.o

clean :
    rm -rf *.o

 

精简版

.PHONY : clean

FM=fun1.o fun2.o fun3.o main.o

main : $(FM)
    (前面一个tab键)gcc -g $^ -o $@
%.c : %.o
    (前面一个tab键)gcc -c -g - Wall $< -o $@
clean :
    (前面一个tab键)rm -rf *.o

 

以上是关于从0学Linux驱动-Makefile详解5的主要内容,如果未能解决你的问题,请参考以下文章

从0学Linux驱动第一期视频已经录制完毕,资料全部奉送

Linux下Makefile详解

添加自己的驱动程序到Linux内核(详解)

Linux 内核顶层Makefile 详解

Linux驱动模块的Makefile分析

RK3568平台开发系列讲解(驱动基础篇)Makefile 详解