C Makefile 入门
学习使用Makefile自动化多文件C项目的编译过程,提高开发效率。 · 难度:入门 · +15XP
什么是Makefile
Makefile 是一个自动化构建工具,它定义了一系列规则,告诉 make 命令如何编译和链接程序。当你修改了某个源文件后,make 只会重新编译受影响的文件,大大节省时间。
Makefile 基本语法
一个规则由目标(target)、依赖(prerequisites)和命令(recipe)组成:
target: prerequisites
command注意:命令前面必须有一个 Tab 键,不能是空格。
简单示例
假设项目有 main.c 和 utils.c,Makefile 如下:
CC = gcc
CFLAGS = -Wall -g
program: main.o utils.o
$(CC) $(CFLAGS) -o program main.o utils.o
main.o: main.c utils.h
$(CC) $(CFLAGS) -c main.c
utils.o: utils.c utils.h
$(CC) $(CFLAGS) -c utils.c
clean:
rm -f *.o program
常用命令:
make或make program:构建目标programmake clean:删除所有中间文件和可执行文件
变量与自动变量
Makefile 支持变量,例如 $(CC)。自动变量如 $@ 表示目标文件名,$^ 表示所有依赖文件,$< 表示第一个依赖文件。优化后的版本:
CC = gcc
CFLAGS = -Wall -g
program: main.o utils.o
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c utils.h
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f *.o program
表格:常用 Makefile 变量
| 变量 | 说明 |
|---|---|
| CC | C 编译器,默认 cc |
| CFLAGS | 编译选项,如 -Wall -O2 |
| LDFLAGS | 链接选项 |
| LDLIBS | 链接的库,如 -lm |
练习提示
在右侧编辑器中,编写一个简单的 Makefile,包含 main.c 和 hello.c 两个源文件,并添加 clean 目标。尝试运行 make 和 make clean,观察输出。