Skip to content

Makefile函数

Makefile中的函数有很多,在这里给大家介绍两个最常用的。

  • wildcard – 查找指定目录下的指定类型的文件

    makefile
    src=$(wildcard *.c)  //找到当前目录下所有后缀为.c的文件,赋值给src
  • patsubst – 匹配替换

    makefile
    obj=$(patsubst %.c,%.o, $(src)) //把src变量里所有后缀为.c的文件替换成.o

实例

在Makefile中所有的函数都是有返回值的。

当前目录下有main.c add.c

makefile
src=$(wildcard *.c)
等价于
src=main.c add.c

obj=$(patsubst %.c, %.o, $(src))
等价于
obj=main.o add.o

Makefile的第四个版本:

makefile
# 默认目标  
all: main

target=main
src=$(wildcard ./*.c)
obj=$(patsubst %.c, %.o, $(src))
CC=gcc
CFLAGS=-I ./
  
$(target):$(obj)
	$(CC) $^ -o $@

%.o:%.c
	$(CC) -c $< $(CFLAGS) -o $@
c
#include "add.h"
#include <stdio.h>

int main(void) {
    printf("%d\n", add(10, 20));

    return 0;
}
c
#ifndef __SYSS_ADD_H__
#define __SYSS_ADD_H__

int add(int a, int b);

#endif //__SYSS_ADD_H__
c
#include "add.h"

int add(int a, int b) {
    return a + b;
}

执行make

缺点: 每次重新编译都需要手工清理中间 .o 文件和最终目标文件