Makefile常用函数

文章目录

    • Makefile常用函数
      • 1. foreach函数
      • 2. filter函数
      • 3. filter-out函数
      • 4. Wildcard函数
      • 5. patsubst函数
      • 6. notdir函数
      • 7. addsuffix函数

Makefile常用函数

1. foreach函数

  • 此函数使用循环操作,是仿照Unix标准shell的for语句;

  • 语法

    $(foreach ,,)
    
    • 流程

        1. 将参数列表的单词逐一取出
        2. 将取出的单词放到指定的变量之中
        3. 执行 所包含的表达式
        4. 执行第一步~第3步
        5. 循环结束, 返回的是每个字符串所组成的整个字符串(空格分隔)
    • 举例

      names := a b c d
      files := $(foreach n,$(names),$(n).o)
      #输出结果为 --> files的值为 "a.o b.o c.o d.o"
      #注意:n是一个局部变量,foreach函数执行结束,n将消失
      

2. filter函数

  • 名称:过滤函数

  • 语法

    $(filter ,)
    
  • 功能:以模式过滤 字符串中的单词,保留符合模式的单词。可以包含多个模式。

  • 返回:符合模式的字符串

  • 举例

    sources := beep.c dealay.c beep.h start.s
    beep : $(sources)
    	gcc -o $@ $(filter %.c %.s,$(sources)) 
    # $(filter %.c %.s,$(sources))的返回值是"beep.c dealy.c start.s"
    

3. filter-out函数

  • 名称:反过滤函数

  • 语法

    $(filter-out ,)
    
  • 功能:以模式过滤 字符串中的单词, 去除符合模式的单词。可以包含多个模式。

  • 返回:返回不符合模式的字符串

  • 举例

    objects := main.o start.s config.c system.o
    main := main.o system.o
    files := $(filter-out $(main),$(objects))
    # $(filter-out $(main),$(objects))的返回值为“start.s config.c system.o”
    

4. Wildcard函数

  • 名称:扩展通配符

  • 语法

    $(wildcard pattern...)
    
  • 功能:以pattern的格式,寻找真实存在的文件

  • 返回:返回存在文件的名字

  • 举例

    # 创建三个文件 a.c b.c c.c
    files := $(wildcard *.c)
    
    all:
    	@echo files = $(files)
    # 结果:files = a.c b.c c.c
    

5. patsubst函数

  • 名称:模式字符串替换函数

  • 语法

    $(patsubst ,,)
    
  • 功能:查找 中的单词是否符合模式,如果匹配的话,以的格式进行替换

  • 返回:函数返回被替换过后的字符串

  • 举例

    files := a.c b.c c.c d.c abc
    
    sub_files := $(patsubst %.c,%.d,$(files))
    
    all:
    	@echo sub_files = $(sub_files)
    	
    # 结果 sub_files = a.d b.d c.d .d.d abc
    

6. notdir函数

  • 名称:取文件函数

  • 语法

    $(notdir )
    
  • 功能:从文件名序列中取出非目录部分的文件。–>也就是路径名中不包含“/”

  • 返回:返回文件序列的非目录部分。

  • 举例

    $(notdir src/foo.c dealy.c)
    
    #返回值为“foo.c dealy.c ”
    

7. addsuffix函数

  • 名称:加后缀函数

  • 语法

    $(addsuffix ,)
    
  • 功能:把后缀加到中的每个单词后面

  • 返回:返回添加过后缀的文件名序列

  • 举例

    $(addsuffix .c,foo bar)
    
    # 返回值为“foo.c bar.c"
    

你可能感兴趣的:(Makefile)