博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Makefile有三个非常有用的变量。分别是$@,$^,$
阅读量:6869 次
发布时间:2019-06-26

本文共 1291 字,大约阅读时间需要 4 分钟。

hot3.png

    每次看makefile的时候,总会遇到一些变量记不住,就需要去查找资料,今天有时间,就顺便把几个常用的变量学习了下,顺便总结了下记忆方法,感觉记住它们并不难,特把方法分享给大家。

 

变量定义:

$^

所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量

会去除重复的依赖目标,只保留一份。

 

$@

表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于

目标中模式定义的集合

 

$?

所有比目标新的依赖目标的集合。以空格分隔。

 

$<

依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将

是符合模式的一系列的文件集。注意,其是一个一个取出来的。

 

$(@D)

表示"$@"的目录部分(不以斜杠作为结尾) ,如果"$@"值是"dir/foo.o",那么"$(@D)"就

是"dir",而如果"$@"中没有包含斜杠的话,其值就是"."(当前目录) 。

 

$(@F)

表示"$@"的文件部分,如果"$@"值是"dir/foo.o",那么"$(@F)"就是"foo.o","$(@F)"相

当于函数"$(notdir $@)"

 

举例详解:

有main.c  test.c  test1.c  test2.c 四个源文件

 

例子1:

%.o : %.c

gcc  -c  $<  -o  $@

 

把所以的c文件编译生成对应的o文件,$<代表每次取的c文件,$@代表每次c文件对应的目标文件

 

 

例子2:

main : main.o  test.o  test1.o  test2.o

gcc  -o  $@  $^

把所有的o文件编译生成可执行的main文件,$^代表所以的依赖文件集合(main.o  test.o  test1.o  test2.o),@代表目标文件(main)

 

例子3:

lib : test.o  test1.o  test2.o

ar r lib $?

 

把有更新的依赖文件重新打包到库lib中, 如果只有test1.o更新,则$?代表test1.o, 如果test.o  test1.o都有更新,则$?代表test.o  test1.o的集合。

 

总结:

 

$^      所有依赖目标的集合

$?      所有有更新的依赖目标集合

$<      依赖目标中的第一个目标,如果依赖以(%)模式定义,则一个一个取出来的

$@     目标文件

$(@D)   $@的目录部分

$(@F)   $@的文件部分

 

记忆方法:

 

dst:source1.o  source2.o  source3.o  source4.o  

xx ......

 

$^    其中^表示水平的范围限定,包含所有的依赖文件集合(source1.o  source2.o  source3.o  source4.o )

$?    其中?表示哪些依赖文件有更新是未知的,有更新的依赖文件集合(?)

$<    其中<表示从集合中取值,第一个依赖的文件 (source1.o)

$@   目标文件  (dst)

$(@D)   $@的目录部分

$(@F)   $@的文件部分

转载于:https://my.oschina.net/u/4000302/blog/3026533

你可能感兴趣的文章
『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)
查看>>
交换机SPAN功能配置
查看>>
MySQL 架构组成—存储引擎
查看>>
基于数值分析思想对多项式求值的原理和应用进行探究
查看>>
vue-devtools vue开发调试神器
查看>>
PHP扩展模块的安装
查看>>
BGP基础操作
查看>>
selenium系列->Actions命令实例整理->goBack()
查看>>
CentOS 7上构建squid传统代理,透明代理(squid3.4.6)
查看>>
SimpleXml项目
查看>>
php下使用PDO创建sqlite3数据库
查看>>
Istio技术与实践6:Istio如何为服务提供安全防护能力
查看>>
大型架构及配置技术Docker
查看>>
ISTP的重要作用
查看>>
GitHub---(使用SSH方式)
查看>>
大规模生产计划技术管理核心理念
查看>>
阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准
查看>>
驼峰设计 PPT美化
查看>>
hcl DHCP与snooping的实践操作 中有个问题
查看>>
Python Python 正则 取中括号值
查看>>