makefile使用笔记(一)入门
By francis_hao Mar 2,2017
makefile
makefile一个很简单的例子如下,该实例完成在执行make时,将main.c编译成可执行文件main的功能。
各项的含义:
main | 目标 |
main.c | 目标的依赖文件 |
: | 目标与依赖的分隔符 |
gcc -o main main.c | 命令(一般是shell命令),必须以TAB开头 |
make工作过程
在默认的情况下,输入make命令时,
- make在当前目录下按顺序读取GNUmakefile、makefile和Makefile。
- 若找到文件则再读取第一个目标,并只将此目标当作最终目标。
- 查看其后的依赖,若依赖存在且未改动过则退出,若依赖不存在则查看之后的目标是否含有此依赖,层层嵌套。依赖若均存在,执行之后的命令。
当然,可以在make之后指定目标,那么make则会直接去读取该指定的目标,下图展示该过程:
此例的makefile中有两个目标:first和second。
只执行make时,make只读取第一个目标first,此目标生成后,其后的目标second不会被处理,但是在make后指定目标second,则会只生成此目标。
伪目标
如果,想要删除上面的makefile生成的目标文件first和second。该怎么办呢?
答案是写一个不需要依赖的目标(比如clean),只用它执行删除命令。
看似很完美的解决了,但是如果很不巧当前文件夹下也有一个和此目标同名的文件(clean),那么这个目标就总是最新的(因为后面没有依赖),每次都不会执行。如下所示
解决的办法就是告诉make这个目标是个伪目标,需要每次都执行。告诉make的方法就是用.PHONY标志此目标,如下
.PHONY的位置无关紧要,放在最下面也是可以的。
注释
makefile里只有行注释,以#开头的行是注释行。若要使用#,可以使用转义字符\#。
结语
makefile的东西其实就这么多,因此这篇文档也就结束了。
本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/6493018.html
参考
【1】 跟我一起写Makefile 陈皓 http://blog.csdn.net/haoel/article/details/2886/