makefileclean怎么写( 二 )


下面我们开始看看如何自己写出makefile 。Makefile的规则 目标 : 需要的条件 (注意冒号两边有空格) 命令 (注意前面用tab键开头) 解释一下: 1 目标可以是一个或多个 , 可以是Object File , 也可以是执行文件 , 甚至可以是一个标签 。
2 需要的条件就是生成目标所需要的文件或目标 3 命令就是生成目标所需要执行的脚本 总结一下 , 就是说一条makefile规则规定了编译的依赖关系 , 也就是目标文件依赖于条件 , 生成规则用命令来描述 。在编译时 , 如果需要的条件的文件比目标更新的话 , 就会执行生成命令来更新目标 。
下面举个简单的例子说明 。如果一个工程有3个头文件 , 和8个C文件 , 我们为了完成前面所述的那三个规则 , 我们的Makefile应该是下面的这个样子的 。
edit : main.o kbd.o command.o display.o / insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o / insert.o search.o files.o utils.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean : rm edit main.o kbd.o command.o display.o / insert.o search.o files.o utils.o 将上面的内容写入到Makefile文件中 , 然后执行make就可以进行编译 , 执行make clean就可以删除所有目标文件 。解释一下 , 也就是说生成最终的目标文件edit , 依赖于一系列的.o目标文件 , 而这些.o文件又是需要用源文件来编译生成的 。
需要注意的是 , clean后面没有条件 , 而clean本身也不是文件 , 它只不过是一个动作名字 , 其冒号后什么也没有 , 那么 , make就不会自动去找文件的依赖性 , 也就不会自动执行其后所定义的命令 。make是如何工作的 在默认的方式下 , 也就是我们只输入make命令 。
那么 ,  1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件 。2、如果找到 , 它会找文件中的第一个目标文件(target) , 在上面的例子中 , 他会找到“edit”这个文件 , 并把这个文件作为最终的目标文件 。
3、如果edit文件不存在 , 或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新 , 那么 , 他就会执行后面所定义的命令来生成edit这个文件 。4、如果edit所依赖的.o文件也不存在 , 那么make会在当前文件中找目标为.o文件的依赖性 , 如果找到则再根据那一个规则生成.o文件 。
(这有点像一个堆栈的过程) 5、当然 , 你的C文件和H文件是存在的啦 , 于是make会生成 .o 文件 , 然后再用 .o 文件生命make的终极任务 , 也就是执行文件edit了 。makefile中使用变量 前面的知识已经足以让你自己完成一个简单的makefile了 , 不过makefile的精妙之处远不止如此 , 下面来看看如何在makefile中使用变量吧 。
在上面的例子中 , 先让我们看看edit的规则: edit : main.o kbd.o command.o display.o / insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o / insert.o search.o files.o。
4.这个makefile文件怎么写obj-m =xxx.o
KDIR=xxx
PWD =$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules