Makefile学习(2)

本文详细介绍了Makefile文件的关键组成部分,包括显式规则、隐式规则、变量定义、文件引用和通配符的使用等内容,并深入讲解了文件搜索路径的设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.makefile文件的内容主要包含以下几个内容:

  • 显示规则:显示规则说明了如何生成一个或者多个目标文件。即makefile的书写者明显的指出要生成的文件,文件的依赖关系,生成命令。如果有多个目标,默认第一个目标为最终目标。
  • 隐晦规则:由于make有自动推导的功能,所以隐晦规则可以让我们比较粗略地书写makefile。
  • 变量定义:makefile中可以定义一系列的变量,变量一般都是字符串,和C中的宏相似。当makefile被执行时,其中的变量都会被扩展到相应的引用位置上。
  • 文件指示:一个makefile文件中可以引用另一个makefile。
  • 注释:makefile中只有行注释,注释符:#,这个和java中的//一样。如果需要在makefile中使用“#”,可以使用反斜杠转义。

 

关于“隐晦规则”后续会进行学习说明。

注:makefile中的命令必须以Tab开始。

 

2.文件引用

语法:

include <filename>

注:

  • filename中可以包含路径和通配符
  • include前面可以有一些空字符,但是不可以以Tab键开始

示例:

有以下几个文件:a.mk   b.mk    c.mk   foo.make

还有一个变量$(bar),其包含了e.mk   f.mk

那么:   include foo.make  *.mk  $(bar)

等价于    include foo.make  a.mk  b.mk  c.mk  e.mk  f.mk

 

3.通配符的使用

make支持三种通配符:*   ?   [...]

  • *:匹配0或多个字符
  • ?:匹配任意单一字符
  • [...]:匹配...中的任意单一字符

 

4.文件搜索

由于在一些大的工程中,源文件数量很多,所以当make需要找寻文件的依赖关系时,就需要知道文件的路径。

以下是设置路径的方法:

  • makefile文件中的特殊变量“VPATH”
  • make的关键字“vpath”(全部小写)

(1)VPATH:

当makefile中指定了这个变量,make就会在当前目录找不到的情况下到指定的目录文件中去找寻;否之,make只会在当前的目录文件中去寻找依赖文件和目标文件。

 

例如:VPATH=src:../headers

 

说明:

  • 目录之间由":"分隔,所以上面的定义指定了两个目录:src   ../headers
  • 当前目录永远是最高级优先搜索的地方

(2)关键字:vpath

和上面的VPATH变量很类似,但是更为灵活。

使用方法有以下三种:

  • vpath <pattern> <directories>

为符合模式<pattern>的文件指定搜索目录<directories>

  • vpath <pattern>

清除符合模式<pattern>的文件的搜索目录

  • vpath

清除所有已经被设置好了的文件搜索目录

 

说明:

  • vpath使用方法中的<pattern>需要包含“%”字符,意思是匹配零个或者若干个字符

eg  “%.h”  :所有以“.h”结尾的文件

  • <pattern>指定了要搜索的文件集,<directories>则指定了文件的搜索目录

eg vpath %.h ../headers :表示make在 ./headers目录下搜索所有以 .h 结尾的文件(如果在当前目录下没有找到的话)

  • 可以连续的使用vpath,以指定不同的策略,make会按照语句顺序执行

eg  vpath  %.c  foo

       vpath  % blish

       vpath  %.c bar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值