shell – 如何在MAKEFILE中传递和返回用户定义函数的值?
我想创建一个函数,它将列表作为参数,执行一些操作并返回一个列表(或标量值).我想使用’define’定义函数.功能:
1)对输入列表执行操作 这在C/C++等语言中很容易实现.当我尝试在MAKEFILE中执行此操作时,我遇到了问题. a)你能指点我的例子或在这里发一个例子吗? 我检查了makefile文档和网上其他一些地方,但找不到任何有用的东西.这会给我一个关于从函数开始的想法.谢谢您的帮助! define myfuntest fnames := $(filter %pattern,$(1)) ifneq ($(fnames),) $(error this is an error) endif endef 来电功能类似于: abc := Documents Downloads return_value := $(call mytestfun,$(abc)) 我希望’fnames’在’return_value’中返回 解决方法
用户定义的宏必须是单个“表达式”.返回的值是扩展表达式的结果.您绝对不能在用户定义的宏中使用ifneq或变量赋值或其他类似的东西.
您可以创建一个与调用一起使用的makefile片段,但它只能与eval一起使用,这意味着它是makefile的一个单独部分,而不是通常定义的“函数”. 因此,如果您可以使用make函数构建用户定义的宏,以便扩展的结果是您想要的结果,那么您可以将其作为宏来实现;例如: myfuntest = $(or $(filter %pattern,$(1)),$(error this is an error)) results := $(call myfuntest,foo barpattern biz baz) 如果过滤器的结果将是匹配单词的列表并且将分配给结果,否则它将运行错误函数. 但是,如果您的函数更复杂且无法以表达式格式表示,则必须使用eval,并传入要分配的变量的名称,如下所示: define myfuntest ... compute fnames from $(2) ... $(1) := $$(fnames) endef 在使用eval和一起调用时,你必须非常小心$vs. $$.然后你调用它: $(eval $(call myfuntest,return_value,$(abc))) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |