Chinaunix首页 | 论坛 | 博客
  • 博客访问: 803973
  • 博文数量: 489
  • 博客积分: 475
  • 博客等级: 下士
  • 技术积分: 3087
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 16:28
文章分类

全部博文(489)

文章存档

2013年(7)

2012年(301)

2011年(181)

分类:

2011-12-29 12:59:41

原文地址:Linux的MakeFile自动变量 作者:huangxb_csu

$@
表示规则的目标文件名。如果目标是一个文档文件(Linux中,一般称.a文件为
文档文件,也称为静态库文件) ,那么它代表这个文档的文件名。在多目标模式
规则中,它代表的是哪个触发规则被执行的目标文件名。
$^
规则的所有依赖文件列表,使用空格分隔。如果目标是静态库文件,它所代表的
只能是所有库成员(.o文件)名。一个文件可重复的出现在目标的依赖中,变量
“$^”只记录它的一次引用情况。就是说变量“$^”会去掉重复的依赖文件。
$<
规则的第一个依赖文件名。如果是一个目标文件使用隐含规则来重建,则它代表
由隐含规则加入的第一个依赖文件。
$?
所有比目标文件更新的依赖文件列表,空格分割。如果目标是静态库文件名,代
表的是库成员(.o文件)。
$%
当规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则
的目标是“foo.a(bar.o)”,那么,“$%” 的值就为 “bar.o”,“$@”的值为“foo.a”。
如果目标不是静态库文件,其值为空。

 

 

 

模式规则类似于普通规则。只是在模式规则中,目标名中需要包含有模式字符“%”
(一个),包含有模式字符“%”的目标被用来匹配一个文件名,“%”可以匹配任何非
空字符串。
在模式规则中,目标文件是一个带有模式字符“%”的文件,使用模式来匹配目标
文件。文件名中的模式字符“%”可以匹配任何非空字符串,除模式字符以外的部分要
求一致。例如: “%.c”匹配所有以“.c”结尾的文件(匹配的文件名长度最少为3个字
母),

首先看编译.c文件到.o文件的隐含模式规则:
 
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
 
此规则描述了一个.o文件如何由对应的.c文件创建。规则的命令行中使用了自动化变量
“$<”和“$@” ,其中自动化变量“$<”代表规则的依赖, “$@”代表规则的目标。
此规则在执行时,命令行中的自动化变量将根据实际的目标和依赖文件取对应值。

阅读(715) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~