Makefile 入门指南
最简单的例子
单文件编译
假设我们有一个main.cpp文件,最简单的Makefile如下:
# 最简单的单文件编译
# 目标:依赖文件
main: main.cpp# 编译命令g++ main.cpp -o main
使用步骤:
- 将上述内容保存为名为Makefile的文件(注意:文件名必须为Makefile,首字母大写)
- 确保main.cpp文件存在于同一目录下
- 打开终端/命令行,导航到该目录
- 运行命令
make
(这将自动查找并执行Makefile) - 程序会生成可执行文件
main
- 运行程序:
- Linux/Mac:
./main
- Windows:
main.exe
- Linux/Mac:
注意事项:
- Makefile中的命令必须以Tab开头,不能使用空格
- 每次修改源文件后,需要重新运行
make
命令
添加变量
我们可以添加变量使Makefile更灵活:
# 使用变量的单文件编译
CC = g++
CFLAGS = -Wallmain: main.cpp$(CC) $(CFLAGS) main.cpp -o main
多文件编译
当项目有多个源文件时:
# 多文件编译示例
CC = g++
CFLAGS = -Wallprogram: main.o utils.o$(CC) $(CFLAGS) main.o utils.o -o programmain.o: main.cpp$(CC) $(CFLAGS) -c main.cpputils.o: utils.cpp$(CC) $(CFLAGS) -c utils.cppclean:rm -f *.o program
进阶功能
使用模式规则
# 使用模式规则简化
CC = g++
CFLAGS = -Wallprogram: main.o utils.o$(CC) $(CFLAGS) $^ -o $@%.o: %.cpp$(CC) $(CFLAGS) -c $<clean:rm -f *.o program
自动查找源文件
# 自动查找所有.cpp文件
CC = g++
CFLAGS = -Wall
SRC = $(wildcard *.cpp)
OBJ = $(patsubst %.cpp,%.o,$(SRC))program: $(OBJ)$(CC) $(CFLAGS) $^ -o $@%.o: %.cpp$(CC) $(CFLAGS) -c $<clean:rm -f *.o program