Makefile基本用法

     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】免费获取数百本计算机经典书籍

    Makefile基本用法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/43257

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午7:58
下一篇 2023年2月8日 下午7:58

相关推荐