make工具与makefile(二)

-----仅作为学习笔记

6.自动化变量

        这理介绍三个最常用的自动化变量:

        $@:表示所有目标

        $<:表示第一个依赖文件,如果依赖模式是%,那么他就表示一系列文件。

                (%为通配符,类似linux上的*)

        $^:表示所有依赖。

        在了解这个三个自动化变量之前,我们先来写一个程序:

main.c

hello.c

hello.h

Makefile

        使用这个Makefile虽然也可以成功编译,但是,一旦编译的文件多了,如果我们还这样编写makefile就会变得非常复杂。所以,自动化变量就派上用场啦。

简化一:用变量表示依赖文件

        后面如果我们再增加依赖文件的话,我们直接在变量var后面增加就可以了。

简化二:使用通配符%,和自动化变量$@ $<替代目标和依赖,简化完如下图所示:

简化三:使用自动化变量$^表示所有依赖,简化完如下图所示:

7.wildcard函数

格式:$(wildcard PATTENR)

功能:展开指定的目录

举例:

        在/home/longlive/test目录有一个a.c的c文件和一个test的文件夹,在/home/longlive/test文件夹下有一个b.c的文件。

        

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

        执行结果:
                

        我们得到了./a.c和./test/b.c,所以wildcard函数会把我们指定目录下的c文件展开(显示出指定目录下的c文件且包含路径)。

8.notdir函数

        格式:$(notdir $(var))

        功能:去掉路径。

举例:

        我们在上面的makefile中加上以下代码,因为上面的例子我们得到的结果是./a.c和./test/b.c是有路径的,我们可以直接使用这个变量。

        

执行结果:

        

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

3.dir函数

        格式:$(dir <names...>)

        功能:取出目录,这里的目录指的是最后一个反斜杠/之前的部分,如果没有反斜杠/就返回当前。

        举例:

        我们在上面的例子中加入以下代码,如下图所示:

        

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

        

4.patsubst函数

        格式:$(patsubst 原文件,目标文件,文件列表)

        功能:替换文件后缀

举例

        我们在上的例子中加入以下代码,如下图所示:

        

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

        

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

        

        运行结果如下:

        

5.foreach函数

        格式:$(foreach <var>,<list>,<test>)

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

举例:

        

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

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值