18_makefile基本语法(下)

makefile基本语法(下)

1.wildcard 函数

格式:$(wildcard PATTENR)
功能:展开指定的目录
举例:
在/home/test 目录有一个a.c 的c 文件和一个test 的文件夹,在/ home/test/test 文件夹下有一个b.c 的文件。

image-20240310194350450

​ 我们在当前目录下创建的makefile 里面写下如下代码,echo 前面加了@符号,echo 这个命令就不显示:

image-20240310194355440

执行结果:

image-20240310194401172

​ 我们得到了./a.c 和./test/b.c ,所以wildcard 函数会把我们指定的./和./test/目录下的c文件展开。

2.notdir 函数

格式:$(notdir $(var))
功能:去掉路径。
举例:
我们在上面的makefile 中加上以下代码,因为上面的例子我们得到结果是./a.c和./test/b.c 是有路径的,我们可以直接使用这个变量。

image-20240310194522594

执行结果:

image-20240310194527319

因为notdir 函数可以去掉路径,所以/a.c 和./test/b.c 去掉路径就得到了a.c 和b.c

3.dir 函数

格式:$(dir <names...>)
功能:取出目录,这里的目录指的是最后一个反斜杠/之前的部分,如果没有反斜杠/就返回当前。
举例:
我们在上面的例子中加入以下代码,如下图所示:

image-20240310194538313

因为var2 的值为./a.c 和./test/b.c,所以取出目录就是./和./test,如下图所示:

image-20240310194545213

4.patsubst 函数

格式:$(patsubst 原文件,目标文件,文件列表)
功能:替换文件后缀
举例
我们在上面的例子中加入以下代码,如下图所示:

image-20240310194650079

这个函数会把var1 变量的a.c 和b.c 的.c 后缀替换为.o,如下图所示:

image-20240310194657449

替换我们可以使用这个函数,也可以使用$(var:a=b)这个格式来替换,我们来改一下上面的代码,如下图所示:

image-20240310194706759

运行结果如下:

image-20240310194714384

5.foreach 函数

格式:$(foreach <var>,<list>,<text>)
功能:把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串
举例:

image-20240310194743052因为var2 变量的值为./和./test,所以先把./取出来放在n 变量,然后在执行wildcard 函数取出./和./test 下面的c 文件的路径。所以执行结果如下图所示:

image-20240310194753795

posted @ 2024-03-31 22:05  爱吃冰激凌的黄某某  阅读(8)  评论(0编辑  收藏  举报