Makefile通配符

发布于:2023-01-19 ⋅ 阅读:(436) ⋅ 点赞:(0)

Makefile 是可以使用 shell 命令的,所以 shell 支持的通配符在 Makefile 中也是同样适用的。 shell 中使用的通配符有:"*","?","[...]"。具体看一下这些通配符的表示含义和具体的使用方法。


实例
test:*.c
 
        gcc -o $@ $^
但是如果我们的通配符使用在依赖的规则中的话一定要注意这个问题:不能通过引用变量的方式来使用,如下所示。

OBJ=*.c
test:$(OBJ)
    gcc -o $@ $^
我们去执行这个命令的时候会出现错误,提示我们没有 "*.c" 文件,实例中我们相要表示的是当前目录下所有的 ".c" 文件,但是我们在使用的时候并没有展开,而是直接识别成了一个文件。文件名是 "*.c"。

如果我们就是相要通过引用变量的话,我们要使用一个函数 "wildcard",这个函数在我们引用变量的时候,会帮我们展开。我们把上面的代码修改一下就可以使用了。

OBJ=$(wildcard *.c)
test:$(OBJ)
    gcc -o $@ $^
还有一个和通配符 "*" 相类似的字符,这个字符是 "%",也是匹配任意个字符,使用在我们的的规则当中。

test:test.o test1.o
    gcc -o $@ $^
%.o:%.c
    gcc -o $@ $^
"%.o" 把我们需要的所有的 ".o" 文件组合成为一个列表,从列表中挨个取出的每一个文件,"%" 表示取出来文件的文件名(不包含后缀),然后找到文件中和 "%"名称相同的 ".c" 文件,然后执行下面的命令,直到列表中的文件全部被取出来为止。

Makefile的规则

在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。

          target... : prerequisites ...

          command

          ...

          ...
         -------------------------------------------------------------------------------

       target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。

       prerequisites就是,要生成那个target所需要的文件或是目标。

       command也就是make需要执行的命令。(任意的Shell命令)
 

       这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。

       说到底,Makefile的东西就是这样一点,好像我的这篇文档也该结束了。呵呵。还不尽然,这是Makefile的主线和核心,但要写好一个Makefile还不够,我会以后面一点一点地结合我的工作经验给你慢慢到来。内容还多着呢。:)

————————————————
版权声明:本文为CSDN博主「小芒果.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42746890/article/details/123579704


网站公告

今日签到

点亮在社区的每一天
去签到