makefile(六):makefile的内置函数

makefile内置有许多函数,包括文本处理函数,文件名处理函数,以及一些其他操作的函数,对于文本处理函数和文件名处理函数,可以参考《gnu make手册》,这里介绍几个特殊的函数

一.foreach函数

foreach函数参见上一节的说明,此处不再赘述

二.if函数

$(if CONDITION,THEN-PART[,ELSE-PART])

condition为真,返回THEN-PART部分的结构,否则返回ELSE-PART部分的结果。ELSE-PART可以省略,当省略之后,condition为假,则不返回。

三.$(call VARIABLE,PARAM,PARAM,…)

调用VARIABLE并将PARAM传递给VARIABLE,举例如下:

reverse = $(2) $(1)
foo = $(call reverse,a,b)

返回的结果为ba

四.$(value VARIABLE)

该函数返回变量的字面量值。比如一个变量是延迟展开的,并且引用了其他的变量,那么当调用这个函数之后,不会对引用的值进行展开。举例如下:

foo = $PATH
all:
    echo $(foo)
    echo $(value foo)

第一行的记过为 ATH,第二行的记过为PATH的值
解析如下:
第一行,打印foo的值,foo的值为 PATH, P为引用变量,没有赋值因此为空,即结果为ATH;第二行,先求出value函数的返回值,然后打印返回值,value函数的返回值,是foo变量的字面上的值,即$PATH,因为这个是在shell环境下,因此PATH被正确的解析

五.$(eval text)

它表示将text当做脚本进行解析,包括脚本的各种语法检测。举例如下

$(eval wanbiao:wanbiao.o)

这样将wanbiao:wanbiao.o这个当做脚本进行解析,解析器发现这个是一个规则的语法,那么就进行相应的规则的解析。搭配起call函数,可以构建各种各样的模板,通过call调用传递不同的参数,构造不同的规则,然后使用eval函数进行解析

六.$(origin VARIABLE)

origin函数,返回变量的出处,返回值有一下几种
1.undefined
变量“ VARIABLE” 没有被定义。
2. default
变量“ VARIABLE” 是一个默认定义( 内嵌变量)。 如“ CC”、“ MAKE”、“ RM” 等变量。 如果在 Makefile 中重新定义这些变量, 函数返回值将相应发生变化。
3. environment
变量“ VARIABLE” 是一个系统环境变量, 并且 make 没有使用命令行选项“ -e”
( Makefile 中不存在同名的变量定义, 此变量没有被替代)。
4. environment override
变量“ VARIABLE” 是一个系统环境变量, 并且 make 使用了命令行选项“ -e”。
Makefile 中存在一个同名的变量定义, 使用“ make -e” 时环境变量值替代了文
件中的变量定义。
5. file
变量“ VARIABLE” 在某一个 makefile 文件中定义。
6. command line
变量“ VARIABLE” 在命令行中定义。
7. override
变量“ VARIABLE” 在 makefile 文件中定义并使用“ override” 指示符声明。
8. automatic
变量“ VARIABLE” 是自动化变量。

七.shell函数

$(shell text)

与eval函数一样,这个也是讲text当做脚本解析,eval是将text当做make脚本解析,shell是将text传递个系统的shell程序,然后由shell进行脚本解析。
因此这个函数可以使用shell里面的所有命令和语法

八.error和wanrning函数

$(error 语句)
$(warning 语句)

error函数,报一个错误,并停止make的执行,然后执行括号内相应的语句
warning函数,报一个警告,不会停止make的执行,然后执行括号内相应的语句

你可能感兴趣的:(linux程序设计)