Makefile文件描述了整个工程的编译、链接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的Makefile。编译整个工程你所要做的唯一的一件事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。
Makefile书写规则:
(1)若工程没有编译过,那么所有的C(或C++)文件都要被编译并被链接;
(2)若工程的某几个C文件被修改,那么只编译被修改的C文件,并链接目标程序;
(3)若头文件被改变了,那么只需要编译引用了这几个头文件的C文件,并链接目标程序。
只要Makefile写得好,所有的这一切,只需要一个mak命令就可以完成。Makefile规则写法:
target ... :prerequisites ...
command
...
...
这是一个文件的依赖关系,即target这一个或多个目标文件依赖于prerequisites中的文件,prerequisites中若有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。要执行lable之后的命令,就要在make命令后面明确指出这个lable的名字。
若被依赖的文件找不到,那么make就直接退出,并报错,而对所对应的命令的错误,或者编译不成功,make根本不理。
Makefile中使用变量:
在makefile中使用变量,可以使得makefile更易维护。举例,使用变量的makefile内容为:
objects=main.o kbd.o command.o display.o
edit:$(objects)
...
...
如果有新的.o文件加入,只需简单地修改一下objects变量即可。
每个Makefile文件都应该写一个清空目标文件的(.o或可执行文件)的规则,一般的风格为:
clean:
rm edit $(objects)
更为稳健的做法是:
.PHONY:clean
clean:
-rm edit $(objects)
.PHONY表示clean是一个“伪目标”,在rm前面的“-”表示也许某些文件出现问题,但不要管,继续做后面的事。
原文链接: https://www.cnblogs.com/joneswood/archive/2012/03/04/2379552.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/43257
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!