
时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)
shell函数
shell函数不同于除&wildcard&函数之外的其它函数。make可以使用它来和外部通信。
* 函数功能:函数&shell&所实现的功能和shell中的引用(``)相同。实现对命令的扩展。这就意味着需要一个shell 命令作为此函数的参数,函数的返回结果是此命令在shell中的执行结果。make仅仅对它的回返结果进行处理;make将函数返回结果中的所有换行符(&n&)或者一对&nr&替换为单空格;并去掉末尾的回车符号(&n&)或者&nr&。进行函数展开式时,它所调用的命令(它的参数)得到执行。除对它的引用出现在规则的命令行和递归变量的定义中以外,其它决大多数情况下,make是在读取解析Makefile时完成对函数shell的展开。
* 返回值:函数&shell&的参数(一个shell命令)在shell环境中的执行结果。
* 函数说明:函数本身的返回值是其参数的执行结果,没有进行任何处理。对结果的处理是由make进行的。当对函数的引用出现在规则的命令行中,命令行在执行时函数才被展开。展开时函数参数(shell命令)的执行是在另外一个shell进程中完成的,因此需要对出现在规则命令行的多级&shell&函数引用需要谨慎处理,否则会影响效率(每一级的&shell&函数的参数都会有各自的shell进程)。
示例1:
contents := $(shell cat foo)
将变量&contents&赋值为文件&foo&的内容,文件中的换行符在变量中使用空格代替。
示例2:
files := $(shell echo *.c)
将变量&files&赋值为当前目录下所有.c文件的列表(文件名之间使用空格分割)。在shell中之行的命令是&echo *.c&,此命令返回当前目录下的所有.c文件列表。上例的执行结果和函数&$(wildcard *.c)&的结果相同,除非你使用的是一个奇怪的shell。
注意:通过上边的两个例子我们可以看到,当引用&shell&函数的变量定义使用直接展开式定义时可以保证函数的展开是在make读入Makefile时完成。后续对此变量的引用就不会有展开过程。这样就可以避免规则命令行中的变量引用在命令行执行时展开的情况发生(因为展开&shell&函数需要另外的shell进程完成,影响命令的执行效率)。
关键词标签:make,shell函数
相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网
热门文章
安装红帽子RedHat Linux9.0操作系统教程
Linux服务器:设计高性能网站架构-LLMP
使用Clonezilla迁移到虚拟Linux环境
Linux上的MRTG流量监控中心
Linux 双网卡绑定一个IP原理及实现
linux和windows等系统远程控制ubuntu桌面
人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法
查看所有0条评论>>