现在的位置: 首页 > 综合 > 正文

make 函数(3)–〉其他常用函数

2016年08月25日 ⁄ 综合 ⁄ 共 1699字 ⁄ 字号 评论关闭

本章总结一些无法归类,比较特殊的make内置函数,但是其实这些函数在实际中反而用的比较多,需要注意。

1,循环函数foreach

     使用格式:$(foreach ARG, ARG_LIST, SINGLE_ACTION)

     意思是对于在ARG_LIST中的每个元素ARG,执行SINGLE_ACTION动作,SINGLE_ACTION一般为另外一个函数。

     参考下面例子:

     DIR_NAME := ipxxx
 
     SRCS := xxxproject/camera/xxx_camera.c \

                        xxxproject/camera/xxx_cascade.c

     SOURCES += $(foreach file, $(SRCS),$(wildcard $(DIR_NAME)/$(file)))

     对于SRCS中的每个文件名(以空格分隔为单位),前面加上一个ipxxx之后累加到变量SOURCE上

     对于游标file(ARG),它只是一个局部的临时变量,只在foreach的上下文有效,它的定义不会影响其他部分定义的同名变量。

     同时,在foreach执行过程中,file是一个直接展开式变量

     参考(http://blog.163.com/caroline_zhang/blog/static/2662557200941824233583/)。


2,创建自定义化参数函数的函数call

     使用格式:$(call FUNC, PARAMS1, PARAMS2, PARAMS3...)

     FUNC是一个含有$(1),$(2),$(3)...的表达式,FUNC定义时不能定义为直接展开式,只能定义为递归展开式

     这个call执行的过程就是用PARAMS1, PARAMS2, PARAMS3代替$(1),$(2),$(3)从而产生不同的结果。


3,判断函数if

     使用格式:$(if ENV, THEN, ELSE)

     if提供类似GNUmake所支持的条件语句ifeq一样的功能,意思就是如果ENV展开非空,计算THEN并返回结果,否则计算ELSE并返回结果

     如:

     SOURCE += $(if $(IPXXX) /tmp/a.c, tmp/b.c),如果IPXXX为空,返回tmp/b.c, 否则返回/tmp/a.c


4,变量来源获取函数origin

    使用格式:$(origin VARIABLE)

    这个比较好理解,就是返回变量VARIABLE的出处,VARIABLE应该是变量的名字而不是应用。

    origin函数有以下几个返回值:

    a,“undifined”,VARIABLE从来没有被定义过。

    b,“default”,VARIABLE是一个默认的变量,如“CC”

    c,“environment”,VARIABLE是一个环境变量,并且makefile被执行时,“-e”参数没有打开

    d,“file”,VARIABLE被定义在某个makefile中

    e,“command line”,VARIABLE在命令行中被定义

    f,“override”,VARIABLE在makefile中被override指示符重新定义的。

    g,“automatic”,VARIABLE是一个自动化变量,如$^,$@等

    如:

    ifeq($(origin PATH), "environment")

        echo "environment"

    else

        echo "not environment"

    endif


5,调用操作系统函数的中介函数shell

   调用方式:$(shell OS_CMD_EXPRESSION)

   将系统命令表达式OS_CMD_EXPRESSION执行后的结果返回

   如:

   PATH = $(shell pwd)


6,GNUmake的控制函数

   a,$(error TEXT) 产生fatal error,终止make的执行,并提示“TEXT”的信息给用户。

   b, $(warning TEXT) 类似error函数,只是不终止make的执行。

   这两个函数主要用makefile的debug


     

抱歉!评论已关闭.