【学习记录】makefile学习记录之一:初识makefile和基础规则

之前在课堂上接触到了makefile的概念,但是不清楚具体是什么,于是想着学一下,顺便记录一下学习历程,希望能坚持下去。另外,自学是看的《跟我一起写Makefile》。

基础规则

targets : prerequisites
    command
    ...
targets : prerequisites ; command
    command
    ...

makefile的基础语法如上,刚开始看的时候不太能理解都代表什么,但是看了具体的例子之后会好理解很多。

foo.o: foo.c defs.h       # foo模块
    cc -c -g foo.c

这段代码表示makefile的目标是生成foo.o这个文件,即foo.o是最终追求的“targets”,而它依赖于foo.c和defs.h这两个文件,即“prerequisites”,如果foo.c和defs.h 的文件日期要比foo.o文件日期要新,或是foo.o不存在,那么代表“依赖关系发生”,就会执行下一行的shell命令(command)“cc -c -g foo.c”,其中规定命令必须以tab缩进为开头。

(另外贴一个新人可能不知道的小知识,学习cs的时候总是能看到foo,bar这些名称,一开始一直不知道代表什么,后来查了下发现就是一个比较随便的约定俗成的名称,比较详细的解释可以看这篇文章:http://t.csdn.cn/Xln1b

通配符

make支持三个通配符,分为是~,?和*。以Linux操作系统举例,~代表用户的默认路径,*代表匹配任意个数的任意字符(包含0个),?代表匹配单个任意字符。

在文件搜寻的部分,make使用VPATH定义额外寻找文件的路径,其中也有一个类似通配符作用的符号,即百分号%。它的意义跟常见的*一样,代表匹配任意个数的任意字符(包含0个)。

举例:vpath %.h ../headers

这一行表示在../headers文件夹下寻找所有后缀为.h的文件(如果某文件在当前目录没有找到的话)。

文件搜寻

文件搜寻分为VPATH和vpath,其中前者可以理解为变量,就像Linux下的PATH环境变量一样,后者可以看作一种命令。

如果定义了VPATH变量,那么,make就会在当前目录找不到的情况下,到所指定的目录中去找寻文件。

举例:

VPATH = src:../headers

其中多个路径之间用冒号分隔(这与Linux下的PATH环境变量相同)。

vpath有三种用法:

vpath <pattern> <directories>  # 1

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

vpath <pattern>  # 2

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

vpath  # 3

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

vpath使用方法中的<pattern>需要包含 % 字符。

vpath可以连续写多行,如:

vpath %.c dir1
vpath %.c fir2
vpath %.c fir3

结语

第一次记录就先到这里,因为时间有限只是非常简单的看了下介绍和第一部分内容,后面接着是伪目标,等下次多看些再写了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值