Makefile简述

Makefile组成:显示规则隐晦规则变量定义文件指示注释


Makefile的寻找规则:是在当前目录依次找三个文件:"GNUmakefile"、"makefile"、"Makefile"。如果makefile有另外的名字,则需要加"-f"或"--file"参数指定,例如一个makefile文件名为aa.mk,则执行需要make -f aa.mk或者make -file aa.mk。

一般来说,make 的最终目标是 makefile 中的第一个目标,而其它目标一般是由这个目标连带出来的。这是 make 的默认行为。 makefile 中的第一个目标是由许多个目标组成,你可以指示 make,让其完成你所指定的目标。要达到这一目的很简单,需在 make 命令后直接跟目标的名字就可以完成(例如“make clean”形式)。

任何在 makefile 中的目标都可以被指定成终极目标,但是除了以“-”打头,或是包含了“=”的目标,因为有这些字符的目标,会被解析成命令行参数或是变量。甚至没有被我们明确写出来的目标也可以成为make 的终极目标,也就是说,只要 make 可以找到其隐含规则推导规则,那么这个隐含目标同样可以被指定成终极目标。

例子:

sources = foo.c bar.c
ifneq ( $(MAKECMDGOALS),clean)include $(sources:.c=.d)
endif

基于上面的这个例子,只要输入的命令不是“make clean”,那么makefile 会自动包含“foo.d”和“bar.d”这两个 makefile。
在 Unix 世界中,软件发布时,特别是 GNU这种开源软件的发布时,其 makefile 都包含了编译、安装、打包等功能。我们可以参照这种规则来书写我们的 makefile 中的目标。

  • all”:这个伪目标是所有目标的目标,其功能一般是编译所有的目标。
  • clean”:这个伪目标功能是删除所有被 make 创建的文件。
  • install”:这个伪目标功能是安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中去。
  • print”:这个伪目标的功能是例出改变过的源文件。
  • tar”:这个伪目标功能是把源程序打包备份。也就是一个 tar 文件。
  • dist”:这个伪目标功能是创建一个压缩文件,一般是把 tar 文件压成 Z 文件,或是 gz 文件。
  • TAGS”:这个伪目标功能是更新所有的目标,以备完整地重编译使用。
  • check”和“test”:这两个伪目标一般用来测试 makefile 的流程。

显示规则:明确指出了如何生成一个或者多个目标文件。包括通过什么命令,将什么文件生成什么文件。
隐晦规则:通过make的自动推导功能,简略写makefile。
变量定义:类似C语言中的宏定义,makefile中定义一系列变量,在执行时扩展到相应的引用位置上。
文件指示:在一个 Makefile 中引用另一个 Makefile,类似C 语言中的 include;另一个是指根据某些情况指定 Makefile 中的有效部分,类似C语言中的预编译#if 一样;还有就是定义一个多行的命令。
注释:使用#进行注释,如果要使用#字符则需要反斜框进行转义,\#。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值