欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数

程序员文章站 2022-07-13 21:21:58
...

文章目录

函数


Make 工程管理器也有函数机制,和变量一样,函数也用符合 $ 进行标识,其使用格式如下:

$(函数名 参数1,参数2,...)

其中 函数名参数 之间用空格隔开,参数参数 之间用 隔开。

常见的内置函数如下:

subst:字串替换

  • 函数原型: $(subst 参数1, 参数2, 参数3)
  • 函数功能:参数3 中的子串 参数1 替换成 参数2
  • 返回值: 返回新的 参数3
  • 例子: result := $(subset china, the world, I love china)resultI love the world

patsubset:字串替换

  • 函数原型: $(patsubset 模式, 参数1, 参数2)
  • 函数功能:参数2 中符合 模式 的字串替换成 参数1
  • 返回值: 返回新的 参数2
  • 例子: result := $(patsubset %.c, %.o, x.c y.c)resultx.o y.o

wildcard:按模式列举文件名

  • 函数原型: $(wildcard 模式参数)
  • 函数功能: 列出当前目录中符合模式参数的文件名;
  • 返回值: 返回符合模式参数的文件名;
  • 例子: result := $(wildcard *.c)result 为当前目录下所有 .c 文件;

strip:去掉参数中首尾空格

  • 函数原型: $(strip 参数)
  • 函数功能: 去掉参数中首尾空格;
  • 返回值: 返回去掉首尾空格后的参数;
  • 例子: result := $(strip China )resultChina

findstring:在源参数中查找指定的参数

  • 函数原型: $(findstring 参数1, 参数2)
  • 函数功能:参数2 中查找指定的参数 参数1;
  • 返回值: 如果找到指定的 参数1,返回 1;否则,返回 ;
  • 例子: result := $(findstring she, you and me)result 为``;

filter:从参数中筛选出符合模式的字符串

  • 函数原型: $(findstring 模式参数, 参数1)
  • 函数功能:参数1 中筛选出符合模式参数的字符串;
  • 返回值: 符合参数模式的字符串;
  • 例子:
a := x.c y.c z.h
result := $(findstring %.c, $(a))

result 的值为 x.c y.c


addsuffix:添加后缀

  • 函数原型: $(addsuffix words, suffix)
  • 函数功能:words 的每个单词后面加上 suffix;
  • 返回值: 返回加上后缀之后的所有单词;
  • 例子: result := $(addsuffix .c, x y)resultx.c y.c

addprefix:添加前缀

  • 函数原型: $(addprefix words, suffix)
  • 函数功能:words 的每个单词前面加上 suffix
  • 返回值: 返回加上前缀之后的所有 单词;
  • 例子: result := $(addprefix src/, x.c y.c)resultsrc/x.c src/y.c

foreach

  • 函数原型: $(addprefix 参数变量, words, 表达式)
  • 函数功能: 循环取出 words 中的单词赋给 参数变量, 最后运行 表达式
  • 返回值: 返回 表达式 的结果;
  • 例子:
a := x y z
result := $(foreach v,  $(a) $(v).c)

result 的结果为:x.c y.c z.c


call:循环把参数赋给指定变量集

  • 函数原型: $(call variates, words)
  • 函数功能: 循环把 words 中的单词赋给 variates 中的变量 $(1), $(2), …;
  • 返回值: 赋值后的变量值;
    例子:
a := $(2) $(1)
result := $(call $(a),  x y)

result 的结果为:yx


if:如果 条件参数 为非空,则执行 执行参数

  • 函数原型: $(if 条件参数, 执行参数)
  • 函数功能: 如果 条件参数 为非空,则执行 执行参数
  • 返回值: 返回 执行参数 结果;
  • 例子:
result := $(if China,  world)

result 的结果为:world


if:如果 条件参数 为非空,则执行 执行参数

  • 函数原型: $(if 条件参数, 执行参数)\ $(if 条件参数, 执行参数1, 执行参数2)
  • 函数功能: 如果 条件参数 为非空,则执行 执行参数/ 如果 条件参数 为非空,则执行 执行参数1;否则,执行 执行参数2
  • 返回值: 返回 执行参数 结果 / 返回 执行参数 的结果;
  • 例子:
result := $(if China,  world) # `result` 的结果为:`world`

a := 
result := $(if $(a), China, world) # `result` 的结果为:`world`

dir:从 参数 中提取目录部分

  • 函数原型: $(if 参数)
  • 函数功能:参数 中提取目录部分;
  • 返回值: 目录部分;
  • 例子: result := $(if /home/test/a.c) result 的结果为:/home/test

error:停止 Make 运行并显示参数

  • 函数原型: $(error 参数)
  • 函数功能: 停止 Make 运行并显示 参数
  • 返回值: 参数
  • 例子: result := $(error error occure) result 的值为:error occure!

warning:Make 运行时显示参数

  • 函数原型: $(warning 参数)
  • 函数功能: Make 运行时并显示 参数
  • 返回值: 参数
  • 例子: result := $(warning warning occure) result 的值为:warning occure!
相关标签: make