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清除缓冲区