关闭

Linux工具篇---make和makefile

标签: makefile
166人阅读 评论(0) 收藏 举报
分类:

一、大体介绍

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.s
	gcc -c test.s -o test.0
test.s:test.i
	gcc -S test.i -o test.s
	
test.i:test.c
	gcc -E test.c -o test.i
	
//现在没有maon.o
main.o:main.s
	gcc -c main.s -o main.o
main.s : main,i
	gcc main.i -o main.s
main.i:main.c
	gcc main.c -o main.i
写完后,直接退出保存,然后make即可

四、makefile伪目标

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

1、clean

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

	
.PHONY:clean
clean:
	-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.c
	gcc -o main.c tset.cl
	
.PHONY:clean//(声明伪目标)
clean:
	-rm -f  main

4.其他

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

(2)#是注释




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31938次
    • 积分:1737
    • 等级:
    • 排名:千里之外
    • 原创:147篇
    • 转载:10篇
    • 译文:0篇
    • 评论:9条
    最新评论