嵌入式Linux开发实用教程(“十二五”国家重点图书出版规划项目)
上QQ阅读APP看书,第一时间看更新

1.2.4 Makefile常用函数

1.Makefile函数语法

在Makefile中,函数的调用和变量的调用类似,都是使用“$”进行标识。语法如下:

        $(函数名 函数的参数)
        ${函数名 函数的参数}

函数名与函数的参数之间使用空格隔开,而函数的参数间使用逗号进行分隔。以上两种写法都是可以的,但是为了风格统一,请不要两者进行混合使用。

2.shell函数

make可以使用shell函数和外部通信。shell函数本身的返回值是其参数的执行结果,没有进行任何处理,对结果的处理是由 make 进行的。当对函数的引用出现在规则的命令行中,命令行在执行时函数才被展开。展开时函数参数(shell命令)的执行是在另外一个shell进程中完成的,因此需要对出现在规则命令行的多级“shell”函数引用需要谨慎处理,否则会影响效率(每一级的“shell”函数的参数都会有各自的shell进程)。

建立一个测试程序,Makefile的内容:

        zhu := $(shell cat func)
        all:
                @ echo $(zhu)

Func文件中的内容:

        juxst zhuzhaoqi

执行完成Makefile之后:

        zhuzhaoqi@zhuzhaoqi-desktop:~/u-boot/Makefile/shellfunction$ make
        juxst zhuzhaoqi

在U-Boot和Linux内核源码中将会大量使用到shell函数。

3.subst函数

subst函数是字符串替换函数,语法为:

        $(subst 被替换字串 替换字串 替换操作字符串)

执行subst函数之后,返回的是执行替换操作之后的字符串。如下:

        name := zhu zhaoqi
        Alphabet_befor := z
        Alphabet_after := Z
        Name := $(subst $(Alphabet_befor), $(Alphabet_after), $(name))
        all:
                echo $(Name)

执行上面的Makefile,输出结果为:

        echo   Zhu  Zhaoqi
        Zhu Zhaoqi

即将“z”替换成了“Z”。

4.dir函数

dir函数作用为取出该文件的目录,其语法为:

        $(dir 文件名称)

执行该函数之后返回文件目录部分。

Makefile中常用函数较多,笔者就不一一例举了,读者可参考相关书籍进行深入了解。

本节配套视频位于光盘中“嵌入式 Linux 开发实用教程视频”目录下第一章 02 课(Makefile)。