make 学习笔记四

make之vpath:


变量“VPATH”的定义中,使用空格或者冒号(:)将多个目录分开。make 搜索的目录顺序
按照变量“VPATH”定义中顺序进行(当前目录永远是第一搜索目录)。

例如:

VPATH = src:../headers

它指定了两个搜索目录,“src”和“../headers”。对于规则“foo:foo.c”如果“foo.c”在“src”
目录下,此时此规则等价于“foo:src:/foo.c”

对于第二种来说:当需要为不类型的文件指定
不同的搜索目录时需要这种方式

vpath:关键字

它所实现的功能和上一小节提到的“VPATH”变量很类似,但是
它更为灵活。它可以为不同类型的文件(由文件名区分)指定不同的搜索目录。它的使用方法有三

1、vpath PATTERN DIRECTORIES
为符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES”。多个目录使用空格或者
冒号(:)分开。类似上一小节的“VPATH”
2、vpath PATTERN
清除之前为符合模式“PATTERN”的文件设置的搜索路径

3、vpath

清除所有已被设置的文件搜索路径。

对于vpath的详细说明待续。

在执行make命令的时候,根据makefile执行步骤,首先读入所有的makefile文件,那么

VPATH = include:src       //指定了makefile的搜索路径

或者

vpath %.h include    //指定.h类型文件的搜索路径是include

vpath %.cpp src      //指定.cpp类型文件的搜索路径是src

这仅仅是对于makefile来说搜索目标和依赖文件的路径,但是对于命令行来说是无效的,也就是说

在执行g++或者gcc时不会自动从VPATH 或者vpath中自动搜索要包含的头文件等信息文件

此时要用到了 -I 或者--incude +路径

例如依赖是:

main.o:main.cpp hello.h

即g++  -c  $<  -Iinclude,这时候,g++会自动从include目录中搜索要包含的hello.h头文件


Makefile 的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似。于是
我们就能把其合并起来。当然,多个目标的生成规则的执行命令是同一个,这可能会可我们带来麻烦,不过好在我们的可以使用一个自动
化变量“$@”(关于自动化变量,将在后面讲述),这个变量表示着目前规则中所有的目标的集合,这样说可能很抽象,还是看一个例子吧。
bigoutput littleoutput : text.g
generate text.g -$(subst output,,$@) > $@
上述规则等价于:
bigoutput : text.g
generate text.g -big > bigoutput
littleoutput : text.g
generate text.g -little > littleoutput
其中,-$(subst output,,$@)中的“$”表示执行一个Makefile 的函数,函数名为subst,后面的为参数。关于函数,将在后面讲述。这里的这
个函数是截取字符串的意思,“$@”表示目标的集合,就像一个数组,“$@”依次取出目标,并执于命令



make的一些tips:

命令执行:

当依赖目标新于目标时,也就是当规则的目标需要被更新时,make会一条一条的执行其后的命令。需要注意的是,如果你要让上一条命
令的结果应用在下一条命令时,你应该使用分号分隔这两条命令。比如你的第一条命令是cd 命令,你希望第二条命令得在cd 之后的基础上运行,那么你就不能把这两条命令写在两行上,而应该把这两条命令写在一行上,用分号分隔



命令出错忽视处理:

方法一:

全局的办法是,给make 加上“-i”或是“--ignore-errors”参数,那么,Makefile 中所有命令都会忽略错误。而如果一个规则是以
“.IGNORE”作为目标的,那么这个规则中的所有命令将会忽略错误。


方法二:

make 的参数的是“-k”或是“--keep-going”,这个参数的意思是,如果某规则中的命令出错了,那么就终目该规则的执
行,但继续执行其它规则。


方法三:

在Makefile 的命令行前
加一个减号“-”(在Tab 键之后),标记为不管命令出不出错都认为是成功的。如:
clean:

-rm -f *.o

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惹不起的程咬金

来都来了,不赏点银子么

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值