Chinaunix首页 | 论坛 | 博客
  • 博客访问: 427501
  • 博文数量: 71
  • 博客积分: 26
  • 博客等级: 民兵
  • 技术积分: 1246
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-23 14:46
个人简介

linux --- 一切皆文件

文章分类

全部博文(71)

文章存档

2021年(1)

2019年(2)

2018年(4)

2017年(7)

2016年(11)

2015年(1)

2014年(2)

2013年(33)

2012年(10)

分类: LINUX

2016-02-12 22:37:46

Makefile第一个规则的第一个目标将作为"终极目标",

以下目标将不会作为"终极目标":
    1:目标名以"."号开始,但不跟"/"。("./"表示当前目录,"../"表示上一级目录)。
    2:模式规则的目标(%.o:%.c)。

'终极目标'是执行make的唯一目的,'终极目标'所在规则作为第一个被执行的规则。
其他规则都是被重建'终极目标'连带出来的,所以其他目标在Makefile中顺序无关。

Example:

foo.o:foo.c foo.h

cc -c -g $@ 

1:foo.o是目标,foo.c foo.h为目标的依赖, cc -c -g $@ 是目标生成的规则。
2:如何确定目标是否过期。
    1:foo.o是否存在,不存在则重建
    2:foo.o是否比foo.c foo.h任意一个旧,如果旧则重建。
3:规则命令中没有明确指明使用头文件foo.h,而foo.c中使用了foo.h,
   这样如果foo.h改变了,则此目标会被重建。如果foo.h不在依赖中,若foo.h变化,则目标不会重建。

规则的语法格式:

TARGETS:PREREQUISITES
    COMMAND
    ……

或者:

TARGETS:PREREQUISITES;COMMAND
    COMMAND
    ……

COMMAND作为独立命令行(Shell命令)执行时,必须以[TAB]开始,从第一条规则之后,所有以[TAB]开始的行都会被作为命令处理。

常规依赖和Read-Only依赖:

    1:常规依赖:如果目标比常规依赖旧,则重建目标
    2:Read-Only依赖:只要依赖存在,不关注和目标的新旧关系,目标都不会被重建,即使Read-Only依赖更新了。

注意:如果依赖同时出来在常规和Read-Only中,则以常规依赖看待。

TARGETS:PREREQUISITES|Read-Only-PREREQUISITES          #"|"之后作为Read-Only依赖
    COMMAND
    ……

文件名通配符:

可以使用如下通配符:"*",".","[...]"

使用的地方:
    1:规则的目标和依赖中
    2:规则的命令中,按照shell的方式展开

注意:
    1:其他地方不可直接使用通配符,需要通过$(wailcard *.c)  #将当前目录下所有以.c结尾的文件列出来。
    2:如文件命中有*,则需要通过'\'转义
    3:"~"在shell中代表当前用户的家目录

example1:

.PHONY clean
clean:
    rm -rf *.o        #shell 执行,删除当前目录下所有以.o结尾的文件

example2:

print:*.c
    ls $?            #"$?"表示依赖中变化的文件
    touch print

example3:

object = *.c        #此表示的是一个叫*.c的文件,而不是所有以.c结尾的文件
object := $(wildcard *.c)      #表示当前目录下所有以.c结尾的文件
object := $(patsubst %.c,%.o,$(wildcard *.c))     #1:wildcard 将当前目录下所有.c结尾的文件列出,以空格隔开  2:patsubst 将所有文件的.c换成.o

阅读(1376) | 评论(0) | 转发(0) |
0

上一篇:Makefile学习(二)

下一篇:Makefile 规则(四)

给主人留下些什么吧!~~