Linux工具篇---make和makefile

来源:互联网 发布:adobe网页制作软件 编辑:程序博客网 时间:2024/06/10 19:55

一、大体介绍

make是一条指令,而makefile是一个文件(当前目录下的)

make命令执行的时候,需要一个makefile文件,以告诉make命令需要怎样的去编译和链接程序(自动完成,就不用手动gcc繁琐的一个一个去执行了)

二、依赖关系和依赖方法

1、依赖关系

makefile就是这个依赖关系,window下编译器就自己完成了这个工作

简单的例子:

你上大学,依赖于父母,父母依赖与公司,公司依赖与消费者,消费者依赖与消费需求、依赖这一整套的逻辑关系,你就有钱上大学了

2、依赖方法

澄清这种依赖关系,根据依赖关系达到某种目的,但是光凭空的说我依赖与你是远远不够的,必须还要有依赖方法,这样才能够达到某种目的

3、关系的表达可以多种多样

举一个简单的例子:test.c生成可执行程序的过程

(1)站在编译器的角度:

test.c生成的目标test.i,teset.i生成test.s,test.s生成test.o,test.o生成test

(2)站在可执行程序的角度:

test的生成依赖于test.o,test.o依赖于test.s,test.s依赖于test.i,test.i依赖于test.c

三、怎么使用makefile

例子:有一个工程,里面有三个文件main.c、test.h、test.c,main.c包含有test.h

下面我们就用makefile描述整个工程的依赖关系和依赖方法:

vim一个makefile或者Makefile,写入下面内容:

main :test.o main.o(//(第一行是描述依赖关系,下一行必须是方法)依赖方法:(必须是方法)TABLE gcc -o main test.o main.c (必须以Tab开头)test.o:test.sgcc -c test.s -o test.0test.s:test.igcc -S test.i -o test.stest.i:test.cgcc -E test.c -o test.i//现在没有maon.omain.o:main.sgcc -c main.s -o main.omain.s : main,igcc main.i -o main.smain.i:main.cgcc main.c -o main.i
写完后,直接退出保存,然后make即可

四、makefile伪目标

上面makefile在执行的过程中生成了许多的临时文件,那么怎么清理它们,这个时候就需要伪目标

1、clean

编写一下程序在上面的makefile后面:

.PHONY:cleanclean:-rm -f *i *s *o main

直接执行make clean命令就完成了清理工作

2、说明:

(1)伪目标
.PHONY是一个声明,clean为伪目标,main test.i main.i等都是都是目标文件在当前目录生成临时文件
PHONY修饰之后,clean伪目标的依赖列表为空
目标文件生成目标,但并不会生成目标文件值,同时又会执行依赖方法
(2)为什么可以make clean就直接清理了

make默认生成第一个可执行文件
要生成其他的目标,就要要制定声明(例如:其他的clean)

3、其实可以写个精简版的

main: main.c test.cgcc -o main.c tset.cl.PHONY:clean//(声明伪目标)clean:-rm -f  main

4.其他

(1)依赖方法前面加上@,不打印依赖方法

(2)#是注释




0 0
原创粉丝点击