Makefile 是一个用于自动化构建过程的文件,通常与 `make` 工具一起使用。它定义了如何编译和链接程序。下面是一个基本的 Makefile 示例,适用于一个简单的 C 语言项目。
示例项目结构
假设你的项目结构如下:
my_project/
├── src/
│ ├── main.c
│ └── utils.c
├── include/
│ └── utils.h
└── Makefile
示例 Makefile
makefile
# 定义编译器
CC = gcc
# 定义编译选项
CFLAGS = -Iinclude -Wall -g
# 定义源文件和目标文件
SRCS = src/main.c src/utils.c
OBJS = $(SRCS:.c=.o)
# 定义最终可执行文件
TARGET = my_program
# 默认目标
all: $(TARGET)
# 链接目标
$(TARGET): $(OBJS)
$(CC) -o $@ $^
# 编译源文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理目标
clean:
rm -f $(OBJS) $(TARGET)
# 声明伪目标
.PHONY: all clean
说明
1. 变量定义:
- `CC`:编译器的名称,在这里是 `gcc`。
- `CFLAGS`:编译选项,`-Iinclude` 指定头文件目录,`-Wall` 开启所有警告,`-g` 增加调试信息。
- `SRCS`:源文件列表。
- `OBJS`:将 `.c` 文件扩展名转换为 `.o` 文件。
2. 默认目标:
- `all` 是默认目标,执行 `make` 时会首先触发这个目标,生成最终的可执行文件。
3. 链接目标:
- `$(TARGET)`需要依赖于目标文件 `$(OBJS)`,使用 `gcc` 将它们链接成可执行文件。
4. 编译规则:
- `%.o: %.c` 是一个模式规则,表示如何从 `.c` 文件生成 `.o` 文件。
5. 清理目标:
- `clean` 目标用于删除所有编译生成的文件,通常在执行 `make clean` 时使用。
6. 伪目标:
- 使用 `.PHONY` 声明以上目标不代表文件,确保 `make` 在执行时不受文件存在影响。
使用方法
- 在项目目录下打开终端并运行 `make` 来编译程序。
- 运行 `make clean` 来清理生成的文件。
这个示例是一个基础的 Makefile,可以根据项目的复杂性增加更多的功能和选项。
查看详情
查看详情