MakeFile 学习日记三(C++)makeFile 注释、引用其他makefile、通配符、文件搜索

一、Makefile的注释:

        Make file中只有行注释,在Unix的Shell脚本一样,其注释是用”#“字符,类似于C++中的"//”,如果要在Makefile中使用“#” 要用“\”进行转义 :“\#”

        在makefile中的命令,必须要以【Tab】键开始

二、引用其他的Makefile

        在Make file中可以使用include关键字可以把别的Makefile包含进来,被包含的文件要放在当前文件的包含位置。Make file的语法: Include <filename>

        filename可以是当前操作系统Shell的文件模式(可以包含路径和通配符)在Include前面可以有一些空字符,但是不能是【Tab】键开始的,include和<filename>可以用一个或者多个空格隔开。       

        Make执行时会首先在当面目录下寻找,如果没有找到还会再一下目录中寻找。

        ①如果Make执行时,有"-I" 或 ”--include-dir“参数,那么make就会在这个参数所指定的目录下去寻找。

        ②如果目录<prefix>/include 例如(/usr/local/bin 或/usr/include) 存在的话,make也会去寻找

如果文件没有找到的话,make会生成一条警告信息,但不会马上出现致命错误。make命令会继续载入其他文件,一旦完成makefile 的读取,make会再次去重新寻找,如果还是没有找到才会提示知名报警。如果你想让make不去理会这些无法读取的文件继续执行,可以在 include前面加一个减号”-“:-include <filename>

三、通配符的使用,

        当我们想定义一系列比较相似的文件,通配符会非常方便我们使用。

        make支持三种通配符:” * “ ,” ?“ , ”[...]“这是和Unix的B-Shell相同的。波浪号”~“字符在文件名中也有比较特殊的用途。如果时”~/test“,这就表示当前用户的$HOME目录下的test目录

        (*.c)表示所有后缀为c的文件,如果文件名中本身有”*“中,那么可以用转义字符”\*“来表示”*“字符。而不是任意长度的字符串。

例子一:
cleam:
rm -f *.o

例子二:
Print: *.c
lpr -p $?
touch print

例子三:
objects = *.o

  "$?"是一个自动化变量

例子三要注意一下,并不时指所有的.o文件,他就是指(*.o)这个字符串

如果你想要他指所有的【.o】文件集合,可以这么写

object :=$(wildcard *.o)

wildcard 是一个关键字,后面在关键字中统一说

四、文件搜寻

        在一些大的工程中,有大量的源文件,我们一帮会将源文件分类,存放在不同的路径中。当make需要寻找依赖关系时,我们可以在文件前面加上路径,让make自动去寻找。

方法一:

        Makefile中的特殊变量“VPATH”就是用来完成这个功能的,如果没有这个变量,make只会从当前目录中去寻找依赖的文件和目标文件,如果定义了这个变量,make就会在当前目录找不到的情况下去指定目录去寻找

VPATH = src:../headers

上面的定义指定两个目录,“src”和“../headers”,make会按照这个顺序进行搜索。目录由“:”分割。

        

方法二:

        使用make的“vpath”(小写)关键字,这个不是变量,时一个make的关键字,相比VPATH它更加的灵活,它的使用方法由三种:

        ①vpath<pattern><directories>

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

        ②vpath<pattern>

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

        ③vpath

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

        vapth使用方法中<pattern>需要包含“%”字符。“%”的意思是匹配零或若干字符例如“%.h”表示所有以.h结尾的文件。非常类似我们linux下的“*”。<pattern>指定了要搜索的文件集。<directories>则指定了文件集的搜索目录。

例如:  vaph %.h ../headers

该句表示 要求make在“../headers”目录下搜索所有.h文件(当需要的文件在当前目录中没有找到时)。

        除此以外,我很可以连续的使用vpath,来指定不同的搜索策略。make会按照语句的先后顺序来执行搜索。

        vpath %.c foo:bar

        vpath % blish

        这个句子表示“.c”结尾的文件 先在foo目录查找,后在bar目录查找 最后再去blish目录中查找。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值