函数功能:函数“shell”所实现的功能和shell中的引用(``)相同。实现对命令
的扩展。这就意味着需要一个shell 命令作为此函数的参数,函数的返回结果是
此命令在shell中的执行结果。make仅仅对它的回返结果进行处理;make将函
数返回结果中的所有换行符( “\n” )或者一对“\n\r”替换为单空格;并去掉末
尾的回车符号( “\n” )或者“\n\r”。进行函数展开式时,它所调用的命令(它
的参数)得到执行。 (可参考 3.9 make如何解析makefile 一节)。除对它的引
用出现在规则的命令行和递归变量的定义中以外,其它决大多数情况下,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 命令作为此函数的参数,函数的返回结果是
此命令在shell中的执行结果。make仅仅对它的回返结果进行处理;make将函
数返回结果中的所有换行符( “\n” )或者一对“\n\r”替换为单空格;并去掉末
尾的回车符号( “\n” )或者“\n\r”。进行函数展开式时,它所调用的命令(它
的参数)得到执行。 (可参考 3.9 make如何解析makefile 一节)。除对它的引
用出现在规则的命令行和递归变量的定义中以外,其它决大多数情况下,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。