Domin1c0's Blog

A technical blog sharing my journey in programming, development, and open source.

View on GitHub
20 July 2025

Makefile

by

makefile

概念

makefile 文件是用来管理工程文件,通过执行make命令,make就会解析并执行makefile文件
makefile命名:makefile或者Makefile

规则

第一个版本

目标:依赖 (tab)命令

main: main.c fun1.c fun2.c sum.c
    gcc -o main main.c fun1.c fun2.c sum.c

第二个版本

检查规则: 要想生成目标文件,先要检查依赖条件是否都存在:


第三个版本

makefile有三种类型的变量:

普通变量

#下面是变量的定义和使用

foo = abc   #定义变量并赋值
bar = $(foo)    #使用变量,$(变量名)

自带变量

CC = gcc #arm-linux-gcc
CPPFLAGS: C预处理的选项 -l
CFLAGS:   C编译器的选项 -Wall -g -c
LDFLAGS:  链接器的选项 -L -l

自动变量

模式规则

target = main
object = main.o fun1.o fun2.o sum.o
CC = gcc
CPPFLAGS = -I./

$(target):$(object)
    $(CC) -o $@ $^

%.o:%.c
    $(CC) -c $< $(CPPFLAGS)

makefile 函数

makefile中所有函数都具有返回值

wildcard

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

#查找指定目录下的指定类型文件
src = $(wildcard *.c) 

patsubst

匹配替换

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

makefile 的清理操作

用途:清理编译生成的中间.o文件和最终目标文件

make clean

#声明目标为伪目标之后,makefile将不会检查该目标是否存在或者该目标是否需要更新
.PHONY:clean
tags: Linux - 基础指令