linux笔记之2--makefile
来源:互联网 发布:帮软件充值话费的软件 编辑:程序博客网 时间:2024/05/28 23:10
1、概述
此系列是为自己做的一个总结,不是很系统,主要目的是记录linux下我认为经常忘的方方面面。
2、makefile的规则
target: prerequisites
command
...
...
target也就是一个目标文件,可以是Object File,也可以是执行文件。
prerequisites就是,要生成那个target所需要的文件或是目标,也就是依赖项。
command也就是make需要执行的命令。(任意的Shell命令)
在Makefile中的命令,必须要以[Tab]键开始。
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。
举个栗子:最简单的hello world程序:只有一个文件main.c,那么我们如何写makefile来生成可执行文件呢?
(1)、首先我们需要把main.c编译为中间文件。
(2)、有了中间文件,我们就可以通过连接来得到最终的可执行文件了。
那么思路理清楚了,看下makefile的写法:
test : main.o
gcc -o test main.o
main.o : main.c
gcc -c main.c
clean :
rm main.o test
解释一下:第一行 test : main.o 声明了最后要得到的可执行文件名为test,他依赖于main.o,连接的命令为:gcc -o test main.o
明白了第一、二行以下的就不用多说了。
3、makefile原理
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“test”这个文件,并把这个文件作为最终的目标文件。
3、如果test文件不存在,或者test所依赖的后面的 main.o 文件的文件修改时间要比test这个文件新,那么,他就会执行后面所定义的命令:gcc -o test main.o来生成test这个文件。
4、如果test所依赖的main.o文件也不存在,那么make会在当前文件中找目标为main.o文件的依赖性main.c, 如果找到则再根据那一个规则:gcc -c main.c生成main.o文件。
5、当然,如果你的main.c文件不存在,make会报错,如果存在则会生成main.o然后再生成test。
4、让makefile使用变量
这样一来如果我们的中间文件发生变化,就很容易了只需要改动obj = main.o就可以了。
5、让make自己推导
test : main.o
test : main.o
main.o : main.c
clean :
rm main.o test
还能简化么? 能!
make会自动推导依赖关系,如果没有显示的写出main.o的依赖关系,make会自动推导出main.o依赖于main.c。那么上面的makefile就变成了这样:
test : main.o
clean :
rm main.o test
现在简单了吧。
6、clean规则
- linux笔记之2--makefile
- Linux笔记之Makefile
- 《linux 内核Makefile》之$(CURDIR)/Makefile Makefile: ;
- linux makefile学习笔记(2)
- Linux内核Makefile笔记
- linux学习笔记-makefile
- Linux Makefile 整理笔记
- makefile 《Linux程序设计笔记》
- linux学习笔记-Makefile-$
- Linux makefile 学习笔记
- uboot分析之Makefile笔记2
- 嵌入式笔记之Makefile
- 学习笔记之Makefile
- Linux 学习笔记之Makefile单个c文件的编写
- 《linux程序设计学习笔记》之----初探makefile(一)
- linux基础之Makefile
- Linux之Makefile (一)
- Linux之Makefile (二)
- 普元日记--自定义底部遮罩层
- 通过文件内容识别文件是不是图片
- 二叉树螺旋遍历
- Android设计模式系列--观察者模式
- Android开发eclipse快捷键
- linux笔记之2--makefile
- 如何在Linux创建安全的临时文件
- Spring Mvc 源码理解。
- SpannableString设置除Color类中颜色以外的自定义颜色
- Android app身体质量指数(BMI)
- C++ 小记 vector 容器(一)
- arcgis api for javascript 图层控制
- Kettle发送邮件
- arp