zoukankan      html  css  js  c++  java
  • makefile中的patsubst

    函数名称:加前缀函数—addprefix

    函数功能:为“NAMES…”中的每个文件名称加入前缀“PREFIX”。參数“NAMES…”是空格切割的文件名称序列,将“SUFFIX”加入到此序列的每个文件名称之前。

    返回值:以单空格切割的加入了前缀“PREFIX”的文件名称序列。

    函数说明:

    演示样例:

     

    $(addprefix src/,foo bar)

     

    返回值为“src/foo src/bar”。

    1、wildcard : 扩展通配符
    2、notdir : 去除路径
    3、patsubst :替换通配符

    样例:
    建立一个測试文件夹,在測试文件夹下建立一个名为sub的子文件夹
    $ mkdir test
    $ cd test
    $ mkdir sub

    在test下,建立a.c和b.c2个文件,在sub文件夹下,建立sa.c和sb.c2 个文件

    建立一个简单的Makefile
    src=$(wildcard *.c ./sub/*.c)
    dir=$(notdir $(src))
    obj=$(patsubst %.c,%.o,$(dir) )

    all:
    @echo $(src)
    @echo $(dir)
    @echo $(obj)
    @echo "end"

    运行结果分析:
    第一行输出:
    a.c b.c ./sub/sa.c ./sub/sb.c

    wildcard把 指定文件夹 ./ 和 ./sub/ 下的全部后缀是c的文件全部展开。

    第二行输出:
    a.c b.c sa.c sb.c
    notdir把展开的文件去除掉路径信息

    第三行输出:
    a.o b.o sa.o sb.o

    在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o,
    不论什么输出。
    或者能够使用
    obj=$(dir:%.c=%.o)
    效果也是一样的。

    这里用到makefile里的替换引用规则,即用您指定的变量替换还有一个变量。
    它的标准格式是
    $(var:a=b) 或 ${var:a=b}
    它的含义是把变量var中的每个值结尾用b替换掉a

    今天在研究makefile时在网上看到一篇文章,介绍了使用函数wildcard得到指定文件夹下全部的C语言源程序文件名称的方法,这下好了,不用手工一个一个指定须要编译的.c文件了,方法例如以下:

    SRC = $(wildcard *.c)

    等于指定编译当前文件夹下全部.c文件,假设还有子文件夹,比方子文件夹为inc,则再添加一个wildcard函数,象这样:

    SRC = $(wildcard *.c) $(wildcard inc/*.c)

    也能够指定汇编源程序:
    ASRC = $(wildcard *.S)

    这样一来,makefile模板可改动的基本就是AVR名称和时钟频率了,其他的一般不用动了。

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4082209.html
Copyright © 2011-2022 走看看