博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Makefile中变量的使用
阅读量:6223 次
发布时间:2019-06-21

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

hot3.png

$@--表示所有的目标文件。

$%--当目标文件是函数库文件的时候, $%表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),其值为空。

$<--依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。

$?--所有同目标相比更新的依赖目标的集合。以空格分隔。

$^--所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。

$+--同 $^ , 区别是 如果目标文件中有重复的,$+ 不会排重。

$*--这 个变量表示目标模式中"%"及其之前的部分。如果目标是"dir/a.foo.b",并且目标的模式是"a.%.b",那么,"$*"的值就是"dir /a.foo"。这个变量对于构造有关联的文件名是比较有效。如果目标中没有模式的定义,那么"$*"也就不能被推导出,但是,如果目标文件的后缀是 make所识别的,那么"$*"就是除了后缀的那一部分。例如:如果目标是"foo.c",因为".c"是make所能识别的后缀名,所以,"$*"的值 就是"foo"。这个特性是GNUmake的,很有可能不兼容于其它版本的make,所以,我们应该尽量避免使用"$*",除非是在隐含规则或是静态模式 中。如果目标中的后缀是make所不能识别的,那么"$*"就是空值。 

 

  上面七个自动化变量可以加上D(Directory)或F(FileName)来分别表示路径和文件名部分。例如,$(@F)表示"$@"的文件部分,如 果"$@"值是"dir/foo.o",那么"$(@F)"就是"foo.o","$(@F)"相当于函数"$(notdir $@)";$(@D)表示"$@"的目录部分(不以斜杠做为结尾),如果"$@"值是"dir/foo.o",那么"$(@D)"就是"dir",而如 果"$@"中没有包含斜杠的话,其值就是"."(当前目录)。 

转载于:https://my.oschina.net/xolsenberg/blog/731775

你可能感兴趣的文章
Android+struts2+json方式模拟手机登录功能
查看>>
#大学#汇编指令查询
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
大型网站技术架构(一)大型网站架构演化
查看>>
百度页面分享插件源代码
查看>>
步步为营:Asp.Net 淘宝通用应用接口攻略
查看>>
渗透测试辅助工具--在线版
查看>>
《别做正常的傻瓜》的一些读书心得
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>
spring配置多数据源问题
查看>>
Altium 拼板方法以及 注意的 地方
查看>>
Android系统源码学习步骤
查看>>
团队编程项目作业3-模块测试过程
查看>>
windows服务器入门 初始化数据盘
查看>>
怎样学习jQuery
查看>>
javaScript中计算字符串MD5
查看>>
第一次面试他人有感
查看>>
XML Parser 概述
查看>>
硬盘还原软件Comodo Time Machine
查看>>
并行计算在基于遥感影像中的应用
查看>>