linux应用程序开发入门——浅谈makefile

  • xidianzxc
  • LV3工程师
  • |      2015-03-04 18:22:09
  • 浏览量 986
  • 回复:8

浅谈makefile

1.       makefile 中的通配符

如果想定义一些比较类似的文件,我们自然就会想到通配符,makefile中我们可以使用3中通配符,分别是:

1.       “ * ”  代表任意长度的字符串

2.       “ ? “  代表单个任意的字符

3.       “ ” 代表一个范围类的字符,如表示abc中的字符

那么,如果我们的文件名中有“*”,这个时候,我们如何来区分是通配符,还是真实的“*”呢?我们可以使用转义字符 ””来实现这个功能。使用“*”表示使用真实的”*“

我们举个列子来使用一下:

linux应用程序开发入门——浅谈makefile

我们可以使用” * “来删除所有的后缀为.o的文件。这里我们是使用了伪目标。

再比如:

      linux应用程序开发入门——浅谈makefile

这里表示,生成all目标的依赖文件时当前目录下的所有c文件。这样省去我们一个一个的敲名字。

注意:

通配符使用在makefile的变量中时,情况有些不一样,比如:

      linux应用程序开发入门——浅谈makefile

这里是在makefile中给一个变量赋值,但是这里的通配符”*”却不会展开,这里的这条变量赋值语句就相当于C语言中的宏定义一样C语言中的宏定义,我想大家都懂的。

 

2.       浅谈伪目标

一般的目标如下:

      linux应用程序开发入门——浅谈makefile

   按照上面的规则,all目标有自己的依赖文件,有自己的生成方法。最终会生成一个名称为all的文件。但是伪目标不一样:

1.       首先,伪目标没有依赖文件

2.       伪目标表示的目标,最终并不真正的生成,相当于这只是一个标签

注意:

     但是有一种情况使我们要注意的,就是我们伪目标的名称不能是工程中存在的文件名,为了避免这种情况发生,我们可以显示的指明某个目标为伪目标,用法如下:

     linux应用程序开发入门——浅谈makefile

    我们使用关键字 PHONY来指明后面的目标是一个伪目标。这样,就算工程中有一个名称为clean的文件,那么也没有影响了。因为伪目标没有依赖条件来判断是否执行,所以伪目标总是被执行的

    另外强调一点,当遇到目标体clean时,make先查看其是否有依赖体,因为clean没有依赖体,所以make认为目标体是最新的而不执行任何操作。为了编译这个目标体,必须输入make clean

这个系类的笔记汇总贴在:linux应用程序开发入门笔记系列,欢迎大家交流指正~

 

 

 

 

 

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:8
crazes 2015-12-23
不错啊  很棒
0   回复
举报
发布
马超飞燕 2015-03-15
谢谢分享顶一个
0   回复
举报
发布
xidianzxc 2015-03-05
多谢老大~
0   回复
举报
发布
灵澈 2015-03-05
挺好的,很接地气
0   回复
举报
发布
xidianzxc 2015-03-05
恩,我这都太菜了,学长,你赶紧来些吧~
0   回复
举报
发布
逐日HZR 2015-03-05
这个挺好的,以后咱们多发发类似的技术贴吧
0   回复
举报
发布
xidianzxc 2015-03-04
谢谢~
0   回复
举报
发布
阖家欢乐 2015-03-04
不错不错
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子