详细写一个makefile,makefile、main.c、hello在同一级目录,hello文件下面有hell.c和h.c.main.c引用了hell.c和h.c
时间: 2024-03-13 07:46:35 浏览: 140
好的,以下是一个简单的Makefile示例,满足你的要求:
```Makefile
# Makefile
# 定义编译器
CC = gcc
# 定义编译选项
CFLAGS = -Wall -Werror
# 定义目标文件
TARGET = hello
# 定义源文件
SRCS = main.c hell.c h.c
# 定义中间文件
OBJS = $(SRCS:.c=.o)
# 定义清理文件
CLEAN_FILES = $(TARGET) $(OBJS)
# 默认目标
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
# 定义清理目标
clean:
rm -f $(CLEAN_FILES)
```
解释一下各个部分的作用:
- `CC`:定义编译器为 gcc。
- `CFLAGS`:定义编译选项为 -Wall 和 -Werror,这只是一个示例,你可以根据需要修改。
- `TARGET`:定义目标文件为 hello。
- `SRCS`:定义源文件为 main.c、hell.c 和 h.c。
- `OBJS`:定义中间文件为将所有 .c 扩展名替换为 .o 扩展名的 SRCS 列表。
- `CLEAN_FILES`:定义需要清理的文件为 TARGET 和 OBJS 列表。
- `all`:默认目标为 TARGET,即编译生成 hello 文件。
- `$(TARGET)`:定义 TARGET 的规则,它依赖于 OBJS,即需要将所有的 .o 文件链接在一起生成 TARGET。
- `$(OBJS)`:定义 OBJS 的规则,它依赖于对应的 .c 文件,即需要将每个 .c 文件编译成对应的 .o 文件。
- `%.o: %.c`:定义了一个模式规则,表示将所有 .c 文件编译成对应的 .o 文件。
- `clean`:定义清理目标,即删除 CLEAN_FILES 列表中的文件。
希望以上的 Makefile 示例能够帮到你!
阅读全文