Linux工具篇---make和makefile

原创 2016年06月02日 08:23:11

一、大体介绍

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)#是注释




版权声明:本文为博主原创文章,未经博主允许不得转载。

我使用过的Linux命令之make - 强大的编译工具

我使用过的Linux命令之make - 强大的编译工具 本文链接:http://codingstandards.iteye.com/blog/969924   (转载请注明出处)   用途说...
  • jiafu1115
  • jiafu1115
  • 2013年04月08日 16:19
  • 513

深入讲解GCC和Make的区别(有涉及makefile文件哟!!!)

刚接触linux编程,很多概论都比较模糊,今天突然用到makefile文件,想到了make与gcc的关系。于是查阅了一些资料,在此做一个小结: 1.gcc是编译一个文件,make是编译多个源文件的工...
  • haluoluo211
  • haluoluo211
  • 2016年11月23日 20:29
  • 3129

make工具及makefile文件

make工具及makefile文件 无论是在Linux还是在UNIX环境中,make都是一个非常重要的编译工具。无论是自己进行项目开发还是安装应用软件,都需要使用make工具。利用make工具,可以将...
  • wait_for_taht_day5
  • wait_for_taht_day5
  • 2015年12月18日 18:19
  • 2756

Makefile和make工具

make工具是一个简化编译工作程序,有了它我们可以进行所谓的“自动化编译”,极大地提高了软件开发的效率。make工具相当于一个Shell,通过解释Makefile的中的命令进行工作。大多数IDE都有这...
  • qaz19870418
  • qaz19870418
  • 2010年12月02日 13:26
  • 3601

Makefile管理工具与GDB调试工具学习笔记

一、Makefile项目管理工具:1、用途:①项目代码编译管理 ②节省编译项目时间 ③一次编写终身受益2、规则记录:(1)、三要素:目标、依赖、命令,格式如下:目标:依赖(条件) 命令 /...
  • Apollon_krj
  • Apollon_krj
  • 2017年02月18日 01:00
  • 548

Linux/Unix环境下的make和makefile

介绍一下make及其描述文件makefile Makefile文件         Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间 的相互关系并自动维护编译工作。而ma...
  • sinat_34157462
  • sinat_34157462
  • 2016年04月20日 19:39
  • 996

gcc、make、makefile、cmake、cmakelists区别

转自:http://www.zhihu.com/question/36609459 辉常哥1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器...
  • zhangchen1003
  • zhangchen1003
  • 2016年03月31日 21:03
  • 3542

Linux 工程编译调试Makefile及技巧

随着编程语言技术的不断发展,应用程序的开发过程也越来越简化。然而功能越是强大的工具,其内部结构也越复杂。高级编程语言的背后是一套复杂的编译系统。编译系统的任务是把高级语言编写的程序翻译成计算机可以直接...
  • ywgdk
  • ywgdk
  • 2016年04月10日 13:47
  • 1837

Linux环境下make指令和makefile文件详解

无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型...
  • paul123456789io
  • paul123456789io
  • 2016年12月08日 11:36
  • 1742

从小程序中看make和Makefile的简单使用

我们都知道程序在执行之前会有两个很重要的过程:编译和链接。当然我们在Windows平台的编译器中(像vs),它会自动帮我们生成最后的执行程序,如(xxx.exe);但是Linux下我们使用vim时,g...
  • qq_21550341
  • qq_21550341
  • 2016年06月11日 14:12
  • 1099
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux工具篇---make和makefile
举报原因:
原因补充:

(最多只允许输入30个字)