Liunx上使用makefile文件编译简单C程序和内核模块

发布时间:2024-11-25 01:53

编程时保持代码简洁和模块化 #生活知识# #生活经验# #编程#

最新推荐文章于 2024-01-31 11:45:15 发布

小半、 于 2019-10-15 22:37:38 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

为什么要编写makefile文件?make命令如何使用?

Makefile:自动编译。先将每个.c文件的编译过程提前写在Makefile文件中,这样可以达到同时并发执行多个程序的效果,makefile文件中通常包含源文件和目标文件的依赖关系以及从源文件生成目标文件的规则。简而言之makefile写明了各个程序不同的构建顺序。

这里我们假如有test_1.c、 test_2.c 、test_3.c 这三个C程序,我们可以在编写makefile文件中编写他们执行的顺序,这样后面使用make命令触发的时候就能达到我们需要的程序执行过程。

Make命令:而make工具可以根据makefile判断哪些文件需要被重新编译,目标文件的构建顺序

常用make命令:

make

根据Makefile编译源代码,连接,生成目标文件,可执行文件。make clean清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。make install将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。

make dist

产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。

在终端中利用vim创建Makefile的命令(注意文件名只能为Makefile开头大写)

vim   Makefile

编写makefile文件执行一个简单的c程序:

CC = gcc

main: shell.c

$(CC) shell.c -o Shell

clean:

rm *.o Shell

一些文件也可用下面符号表示:

$@: 代表规则里面的目标文件。

$<:代表规则当中的第一个依赖文件。

%.c:%.o   所有.c文件全部编译成.o文件

编写makefile文件执行多个c程序:下面例子是创建一个

main: main.o add.o sub.o

main.o: main.c

gcc -c main.c -o main.o

add.o: add.c

gcc -c add.c -o add.o #加-c 指定生成为可重链接.o文件

sub.o: sub.c

gcc -c sub.c -o sub.o

.PHONY:clean

clean:

-rm -rf *.o

在Makefile文件中一定要将每一个.c文件按执行顺序先编译成.o文件,再按顺序将.o文件编译成可执行文件。

每次编译过后会产生很多的.o文件,对于程序运行没什么太大意义,反而会占内存,所以我们也可以在Makefile文件中添加清除命令(clean) 

.PHONY:clean //使用的必要性:如果不用PHONY 外面有clean,则会报错。

clean: 删除所有文件类型为.o的文件

rm –rf *.o

例子:编写makefile文件来内核文件,我理解的就是头文件中含有#include<linux/init.h>之类的,他们用gcc不能运行,大概不同的头文件也有不同的makefile编写的方式吧,这里是找的含这种liunx头文件编译的一个通用的模版。

obj-m += simple.o //需要运行的sipmle文件

all:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

一些其他常见liunx命令的使用:

lsmod 加载当前所有的内核模块module_init()注册模块的入口点module_exit()

注册模块的退出点

make编译文件sudo insmod simple.ko加载simple.ko这个内核模块dmesg检查缓冲区内容sudo rmmod simple删除内核模块sudo dmesg -c清除缓冲区

网址:Liunx上使用makefile文件编译简单C程序和内核模块 https://www.yuejiaxmz.com/news/view/247656

相关内容

【Linux探索学习】第九弹——Linux工具篇(四):项目自动化构建工具—make/Makefile
ESP8266模块使用完整教程
现实生活用什么软件编程
Application terminated, rc = 0x1;当运行裸机程序时出现
编写一个简单加密程序!!!
50个常见的C#面试问题和答案合集和详解
Halcon linux makefile 配置
生活中什么是编程软件
修复在项目编译过程中出现的 ModusToolbox™ 编译时间过长的问题
Python Base64模块的使用

随便看看