Makefile函数

【makefile函数】makefile 常用函数汇总 阅读详情

Makefile函数


内置函数

所有的函数具有如下的形式:
$(function-name arg1[, argn])

1.call

  • $(call macro-name[, param1 ...])
    call是一个内置于make的函数,call会扩展它的第一个参数并把其余参数依次替换到出现$1 $2 …的地方。macro-name可以是任意的宏或者变量。

2.filter filter-out

  • $(filter pattern ...,text)
  • $(filter-out pattern...,text)
    filter函数会将text视为一系列被空格隔开的单词,与pattern比较之后,接着会返回相符者。filter可以接受多个(被空格隔开的)格式。格式必须是整个单词,才可以将相符的单词放到输出列表中。
    模式中只可以包含一个%字符。如果模式中包含了额外的%字符,那么除了第一个字符都会被视为文字字符(literal character)。
    filter-out函数与filter刚好相反,用来选出与模式不相符的每个单词。

3.findstring

    usage:`$(findstring string...,text)`

此函数将会在text里搜索string。如果该字符串被找到了,此函数就会返回string;否则,他会返回空值。
注意:此函数返回的只是“搜索字符串”,而不是它所要找到的包含该字符串的单词。其次,“搜索字符串”无法包含通配符。

4.subst patsubst

  • $(subst search-string,replace-string,text)
  • $(patsubst search-pattern,replace-pattern,text)
  • 引用替换:$(variable:serach=replace)
    subst是一个不具有通配符能力的搜索与替换函数。常被用来在文件名列表中将一个扩展名替换成另一个扩展名。
    patsubst具有通配符能力。照例,此处的模式只可以包含一个%字符。切记,search-pattern必须与text的整个值进行匹配。
    引用替换可移植。其中search可以是一个简单的字符串,如果是这样的话,只要该字符串出现在一个单词的末尾,就会被替换成replace。此外,search可以包含一个代表统配字符%,如果是这样的话,make会依照patsub的规则进行搜索和替换的操作。

5.words word firstword wordlist

  • $(words text)
  • $(word n,text)
  • $(firstword text)
  • $(wordlist start,end,text)
    说明:words返回text中单词的数量
    word返回text中的地n各单词,第一个单词的编号是1.如果n大于text中单词个数,则返回空。
    firstword返回text中的第一个单词。等效于$(word 1,text)。
    wordlist返回text中范围从start(含)到end(含)的单词。编号规则同word。

6.sort

  • $(sort list)
    sort函数会排序它的list参数并且移除重复的项目。按照字典顺序排序,以空格分割,删除前导以及结尾的空格。

6.shell

  • $(shell command)
    shell函数的参数会被扩展(就像所有其他的参数)并且传递给subshell来执行。然后make会读取command的标准输出,并将之返回成函数的值。输出中所出现的一系列换行符会被缩减成单一空格号,任何接在后面的换行符号都会被删除。标准错误以及任何程序的结束状态都不会被返回。

文件名函数

1.wildcard

$(wildcard pattern...)
说明:wildcard函数的参数是一份模式列表,他会对列表中的每个模式进行扩展的动作。如果被扩展的模式找不到相符的文件,则会返回空字符串。

2.dir nodir

  • $(dir list...)
  • $(notdir name...)
    dir函数会返回list中每个单词的目录部分。下面的用户函数会返回包含C源文件的每个子目录:
    source-dirs:=$(sort $(dir $(shell find . -name '*.c')))
    notdir函数会返回文件路径的文件名部分。下面的用户函数会从一个Java源文件返回Java的类名:
    get-java-class-name=$(notdir $(subst .java,,$1))

3.suffix basename addsuffix addprefix join

  • $(suffix name...)
  • $(basename name...)
  • $(addsuffixsuffix,name...)
  • $(addprefixprefix,name...)
  • $(joinprefix-list,suffix-list)
    join是dir和notdir的反函数。它会把两个列表的对应元素连接在一起。可以用来重建被dir和notdir分解的列表。

3.流程控制

1.if

  • $(ifcondition,then-part,else-part)
    if函数会根据条件表达式的求值结果,从两个宏中选择一个进行扩展。如果condition扩展之后包含任何字符(即使是空格),那么它的求值结果为真,于是会对then-part惊醒扩展的动作;否则,如果condition扩展之后空无一物,那么它的求值结果为假,于是会对else-part进行扩展的动作。

2.error

  • $(errortext)
    error函数用来输出错误信息。在此函数输出信息之后make会以2这个结束状态终止运行。输出中包含当前makefile的名称、当前的行号以及消息正文。下面实现assert编程结构:
# $(call assert,condition,message)
define assert
    $(if $1,,$(error Assertion failed: $2))
endef
# $(call assert-file-exists,wildcard-pattern)
define assert-file-exists
    $(call assert,$(wildcard $1),$1 dose not exist)
endef
# $(call assert-not-null,make-variable)
define assert-not-null
    $(call assert,$($1),The variable "$1" is null)
endef
error-exit:
    $(call assert-not-null,NON_EXISTENT)

3.foreach

  • $(foreachvariable,list,body)
    这个函数可以让你在反复扩展文本的时候,将不同的值替换进去。(这和你使用不同的参数反复执行函数的状况是不一样的,尽管结果一样)。例如:
letters:=$(foreach letter,a b c d,$(letter))
show-words:
        #letters has $(words $(letters)) words: '$letters)'
$ make
# letters has 4 words: 'a b c d'

较不重要的杂项函数

1.strip

  • $(striptext)
    strip函数将会从text中移除所有的前导和接在后面的空格,并以单一空格来替换内部所有空格。此函数常用来清理条件表达式中所使用的变量。

2.origin

  • $(originvariable)
    origin函数将会返回描述变量来自何处的字符串。这个变量可以协助你决定如何使用一个变量的值。比如,如果一个变量来自环境,或许你想要忽略该变量的值;如果该变量来自命令行,你就不会这么做。
# $(call asert-defined,variable-name)
define assert-define
    $(call assert, \
        $(filter-out undefined,$(origin $1)), \
        '$1' is undefined)
endef

origin的返回值包括:

undefined: 变量尚未定义
default: 变量的定义来自make的内置数据库。如果你改变了内置变量的值,origin所返回的是最近一次的定义来自何处
environment:变量的定义来自环境(未使用–environment-overrides)
environment override:变量的定义来自环境(使用了–environment-overrides)
file:变量的定义来自makefile
command line:变量的定义来自命令行
override:变量的命令来自override指令
automatic:这个变量是make所定义的自动变量

3.warnig

  • $(warningtext)
    warning函数与error类似,不过warning不会导致make结束运行。其他特点相同。
$(if $(wildcard $(JAVAC)),,\
    $(warning The java compiler variable,JAVAC ($(JAVAC)),\
        is not properly set.))

高级的用户自定义函数

call函数将会把它的每个参数依次绑定到$1、$2等编号变量。你可以为call函数指定任意多个参数,你还可以通过$0来访问当前所执行的函数的名称(即变量名称)。使用这个信息,我们可以编写一对调试函数来追踪宏的扩展过程:

# $(debug-enter)
debug-enter = $(if $(debug_trace),\
                $(warning Entering $0($(echo-args))))

# $(debug-leave)
debug-leave = $(if $(debug_trace),$(warning Leaving $0))

comma := ,
echo-args   = $(subst ' ','$(comma) ',\
                $(foreach a,1 2 3 4 5 6 7 8 9,'$($a)'))

如果我们要查看函数a和b是如何被调用的,可以:

debug_trace = 1
define a
    $(debug-enter)
    @echo $1 $2 $3
    $(debug-leave)
endef

define b
    $(debug-enter)
    $(call a,$1,$2,hi)
    $(debug-leave)
endef

trace-macro:
        $(call b,5,$(MAKE))

对这个makefile执行make后会有如下输出:

$ make
makefile:14: Entering b( ‘5’, ‘make’, ”, ”, ”, ”, ”, ”, ”)
makefile:14: Entering a( ‘5’, ‘make’, ‘hi’, ”, ”, ”, ”, ”, ”)
makefile:14: Leaving a
makefile:14: Leaving b
5 make hi

1.eval与value函数

TODO

从半导体物理到实战:手把手教你测量MOS管体二极管的Vf和Trr 本文深入探讨了MOSFET体二极管的关键参数测量方法,重点讲解了正向压降(Vf)和反向恢复时间(Trr)的测量原理与实战步骤。通过搭建测试平台,使用万用表和示波器等工具,手把手指导如何量化这些影响开关损耗和效率的核心参数,并对比分析了硅基与碳化硅(SiC)器件在体二极管性能上的显著差异。 阅读详情

相关推荐

GWAS与eQTL相结合,进一步筛选疾病相关基因

欢迎关注”生信修炼手册”!在GWAS分析结果中,大部分显著的SNP位点都位于非编码区,很难直接挖掘这些位点的调控机制。通常假设与疾病关联的SNP位点通过调控基因表达来发挥作用,而eQTL...

庐州月光的博客 1万+

Makefile学习5 - call和eval函数

Makefile call和eval函数解析

to_be_better_wen的博客 1780

新手学习Vivado XDMA (1) - 配置详细分析

PCIe 在 Vivado XDMA 中的配置分析。

qq_18553915的博客 9708

makefile中的call、eval函数

今天看Makefile 时,看到里面有call、eval,百度了一下,还是不太会。在此分享俩篇个人觉得比较好的文章。call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,你可以定义许多参数,然后你可以用call函数来向这个表达式传递参数。其语法是:(call;,;,;,;...)当make执行这个函数时,;参数中的变量,如(call ;,;...

ai_ai_you的博客 1977

JLINK/SWD/STLINK下载选项区别

摘要: 本文对比了JLINK/SWD/STLINK的6种下载模式:Normal(硬件复位)、Hot plug(无复位)、Under reset(持续复位后连接)、Software reset(软件复位)、Hardware reset(全复位)和Core reset(内核复位)。重点分析了各模式的操作逻辑、适用场景及注意事项,其中Under reset模式是解决SWD禁用/程序异常的首选方案。通过对比表归纳了复位范围、NRST操作等核心差异,并给出场景选择建议:排查连接问题优先选Under reset,常规调

亚洲程序员盟主得博客 395

高速接口电平标准互连设计:LVPECL、PECL与LVDS的实战解析

本文深入解析了LVPECL、PECL与LVDS三种高速接口电平标准的互连设计实战。针对信号共模电压、阻抗匹配等核心差异,详细对比了直流耦合与交流耦合两种主流方案,并提供了电阻网络计算、布局布线要点及光模块等特殊场景下的选型建议,帮助工程师解决高速信号间的“翻译”难题,确保信号完整性。

weixin_29198045的博客 536

【makefile函数】makefile 自定义函数、call 函数、eval函数

【makefile函数】makefile 自定义函数、call 函数、eval函数

challenglistic的博客 3542

不会C# Winform用户界面设计?是因为没有掌握这些控件(建议收藏)

文章目录6.1 常用控件6.1.1 单选按钮(RadioButton)6.1.2 复选框(CheckBox)6.1.3 框架1. 面板控件Panel2. 分组框GroupBox3. TabControl控件6.1.4 应用实例6. 2 列表框和组合框6.2.1 列表框(ListBox)6.2.2 组合框(ComboBox )6.2.3 应用实例6.3 用户交互界面6.3.1 滚动条和进度条6.3.2 定时器6.3.3 菜单设计菜单设计概述MenuStrip和ContextMenuSt

智慧空间实验室 2920

makefile中的call函数

call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,你可以定义许多参数,然后你可以用call函数来向这个表达式传递参数。其语法是: $(call ;,;,;,;...) 当make执行这个函数时,;参数中的变量,如$(1),$(2),$(3)等,会被参数;,;,;依次取代。而;的返回值就是 call函数的返回值。例如: reverse =

rockly89的博客 2万+

订餐平台餐厅信息抓取:使用Python爬虫获取商家信息和用户评价

在这篇博客中,我们展示了如何使用Python爬虫抓取订餐平台上的餐厅信息和用户评价数据。通过使用requests和Selenium,我们能够有效地从静态和动态网页中提取数据,并使用pandas和matplotlib对数据进行存储和分析。未来,您可以根据需求进一步扩展功能,例如增加错误处理、增加抓取多个页面的能力,或者使用高级技术如分布式爬虫来抓取更大规模的数据。

2201_76125261的博客 1651

Autosar配置——导入DBC后配置SecOC同步报文和同步请求报文

在Autosar中,安全性是一个重要的考虑因素,而SecOC(Secure On-Board Communication)是一种用于保护通信数据完整性和安全性的安全机制。在上述示例中,我们配置了同步报文和同步请求报文的属性。接下来,我们需要在Autosar中配置同步报文和同步请求报文。同步报文用于在通信双方之间同步SecOC状态,而同步请求报文用于请求SecOC的状态信息。通过以上配置,我们成功地导入了DBC文件,并在Autosar系统中配置了SecOC同步报文和同步请求报文。希望以上信息对您有所帮助!

CyberSphinx的博客 649

Makefile call函数

8.6 call函数 “ call”函数是唯一一个可以创建定制化参数函数的引用函数。使用这个函数可以 实现对用户自己定义函数引用。我们可以将一个变量定义为一个复杂的表达式,用“ call” 函数根据不同的参数对它进行展开来获得不同的结果。¾ 函数语法:$(call VARIABLE,PARAM,PARAM,...) ¾ 函数功能:在执行时,将它的参数“ PARAM”依次赋值给临时变量“ $(1)”、“ $(2)” (这些临时变量定义在“ VARIABLE”的值中,参考下边的例子)…… call 函 数

spy_007_的博客 2865

【二 Deepseek+Coze案例】【 2.2 Coze + Deepseek 实现小红书爆款笔记:打造专属Agent智能体】

摘要 本文介绍了如何利用Coze平台和Deepseek模型构建自动化Agent智能体,用于生成和优化小红书爆款笔记。文章首先分析了爆款笔记的核心特征,包括精准定位、吸引标题、实用内容、精美排版和热门标签。随后提出Agent智能体的功能需求,涵盖热点追踪、内容生成与优化、数据分析及自动发布等模块。在技术实现上,详细阐述了从环境配置、数据采集到内容生成与优化的全流程,并提供了Python代码示例,展示如何调用Coze函数获取热点数据及竞品笔记。该方案通过智能化的内容创作与运营策略,帮助用户高效打造高曝光的小红书

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 2276

【Makefile】makefile中常用函数

常用的make函数使用方法汇总。make函数常用于处理文本,使得Makefile具有通用性调用方式。

shortgiraffe的博客 1774

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Makefile学习之路(3) — Makefile的函数

Makefile学习之路(3) — Makefile的函数 一、前言 Makefile 提供了大量的函数,这些函数都是make本身实现的,函数调用的格式如下: $(function argument1, argument2, argument3) 这里function是函数名, argument是该函数的参数。参数和函数名之间是用空格或 Tab 隔开,如果有多个参数,它们之间用逗号隔开。这些空格和逗号不是参数值的一部分。 二、wildcard函数 函数wildcard语法如下 $(wildcard pat

qq_38113006的博客 4935

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Makefile:使用函数

1. makefile中的函数 make解释器提供了一系列的函数供makefile调用(即预定义函数,相当于库函数) 在makefile中支持自定义函数实现,并调用执行 通过define关键字实现自定义函数 自定义的函数一般用于定义命令的集合,并且运用于规则中 自定义函数的语法来看下面的例子: 在Makefile中, 通过define关键字来实现函数的自定义,并以endef关键字结束,自定义函数使用预定义函数call调用,后边跟自定义函数名及参数。 define 函数名 ...

bleauchat的博客 4747

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Makefile 函数

makefile 下     使用函数     ————     在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。     一、函数的调用语法     函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:    

hushup的专栏 1335

makefile的wildcard函数

在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN...) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。需要注意的是:这种情况下规则中通配符的展...

mlove编程 1万+

makefile的内嵌函数

makefile的内嵌函数

weixin_65437579的博客 1021

Makefile常用函数

一、字符串处理函数 1.$(subst FROM,TO,TEXT) 函数名称:字符串替换函数—subst。 函数功能:把字串“TEXT”中的“FROM”字符替换为“TO”。 返回值:替换后的新字符串。 2.$(patsubst PATTERN,REPLACEMENT,TEXT) 函数名称:模式替换函数—patsubst。 函数功能:搜索“TEXT”中以空格分开的单词,将否符合模...

JustDoIt_201603的博客 733

Makefile中常用函数使用

Table of Contents 一、函数调用的语法 二、文件名操作函数 1、 $(dir )取目录函数 2、$(notdir )取文件函数 3、$(suffix )取后缀函数 4、 $(basename )取前缀函数 5、 $(addsuffix ,)加后缀函数 6、$(addprefix ,)加前缀函数 ...

shenlong1356的博客 1157

makefile中的函数

文章目录1 foreach函数2 wildcard函数3 patsubst函数 1 foreach函数 语法: $(foreach var,list,text) 简单地说,就是 for each var in list, change it to text。 对list中的每一个元素,取出来赋给var,然后把var改为text所描述的形式。 例子: objs := a.o b.o dep_fil...

木子皿--啥都不会的菜鸟 584

Makefile之使用函数

使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。 一、函数的调用语法 函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $( ) 或是 ${ }

L_Nan的专栏 724

Makefile origin 函数

origin 函数的作用是告诉你变量是哪里来的,其出生状况如何,他并不改变变量。其语法是: $(origin) 上面,为变量的名字,而不是引用,所以一般没有 $ 字符在前。origin 函数通过返回值来告诉你的出生情况。下面用实例说明: 1. 当从来未定义过该变量时,origin 函数返回 "undefined" 。如下面的 Makefile 代码: all: @echo $(origin V) 运行输出: $ make undefined 2. 如果该变量为环境变量...

1283
下一篇: Makefile自动产生依赖
InvokerZhang
博客等级 码龄11年 9粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值