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命令时,

  1. make在当前目录下按顺序读取GNUmakefile、makefile和Makefile。
  2. 若找到文件则再读取第一个目标,并只将此目标当作最终目标。
  3. 查看其后的依赖,若依赖存在且未改动过则退出,若依赖不存在则查看之后的目标是否含有此依赖,层层嵌套。依赖若均存在,执行之后的命令。

当然,可以在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/

原文地址:https://www.cnblogs.com/yinghao-liu/p/6493018.html