Makefile 入门指南

时间:2025-04-21 09:18:51

Makefile 入门指南

最简单的例子

单文件编译

假设我们有一个main.cpp文件,最简单的Makefile如下:

# 最简单的单文件编译
# 目标:依赖文件
main: main.cpp
	# 编译命令
	g++ main.cpp -o main

使用步骤:

  1. 将上述内容保存为名为Makefile的文件(注意:文件名必须为Makefile,首字母大写)
  2. 确保main.cpp文件存在于同一目录下
  3. 打开终端/命令行,导航到该目录
  4. 运行命令 make (这将自动查找并执行Makefile)
  5. 程序会生成可执行文件 main
  6. 运行程序:
    • Linux/Mac: ./main
    • Windows: main.exe

注意事项:

  • Makefile中的命令必须以Tab开头,不能使用空格
  • 每次修改源文件后,需要重新运行make命令

添加变量

我们可以添加变量使Makefile更灵活:

# 使用变量的单文件编译
CC = g++
CFLAGS = -Wall

main: main.cpp
	$(CC) $(CFLAGS) main.cpp -o main

多文件编译

当项目有多个源文件时:

# 多文件编译示例
CC = g++
CFLAGS = -Wall

program: main.o utils.o
	$(CC) $(CFLAGS) main.o utils.o -o program

main.o: main.cpp
	$(CC) $(CFLAGS) -c main.cpp

utils.o: utils.cpp
	$(CC) $(CFLAGS) -c utils.cpp

clean:
	rm -f *.o program

进阶功能

使用模式规则

# 使用模式规则简化
CC = g++
CFLAGS = -Wall

program: 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