1.实际Linux环境下的C语言程序开发中,一个应用程序有成百上千个.c和.h文件是很常见的事,这就对程序的编译提出挑战,而Makefile是帮助我们轻松编译的利器。本题模仿实际开发过程中的多目录结构,.c文件放在src目录,.h文件放在include目录,生成的中间文件放在obj目录(编译过程中生成),最终编译成功的可执行文件放在bin目录。具体的.c和.h文件已经提供给你(亲测正确可用)并且放置在附件的“问题1的C语言代码.zip”,请自行创建上述4个目录,并且将.c文件放置到src目录,.h文件放置到include目录,如下图所示: 要求编写一个Makefile文件使得编译的中间产品.o文件放置在obj目录,最终的可执行文件main放置在bin目录。另外,要求Makefile中提供clean选项,只要输入命令“make clean”,可以将所有生成的.o文件和可执行文件删除。
时间: 2024-02-18 07:06:04 浏览: 121
以下是Makefile文件的内容:
```Makefile
# 定义编译器
CC = gcc
# 定义源文件目录、头文件目录、中间文件目录、目标文件目录
SRC_DIR = src
INC_DIR = include
OBJ_DIR = obj
BIN_DIR = bin
# 定义源文件列表、中间文件列表、目标文件列表
SRCS = $(wildcard $(SRC_DIR)/*.c)
OBJS = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS))
TARGET = $(BIN_DIR)/main
# 定义编译选项和链接选项
CFLAGS = -Wall -I$(INC_DIR)
LDFLAGS =
# all规则:编译目标文件
all: $(TARGET)
# 目标文件规则:依赖于中间文件,链接生成可执行文件
$(TARGET): $(OBJS)
$(CC) $(LDFLAGS) $^ -o $@
# 中间文件规则:依赖于源文件和头文件,编译生成中间文件
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# clean规则:删除所有中间文件和可执行文件
clean:
rm -rf $(OBJ_DIR)/*.o $(TARGET)
```
其中,`SRC_DIR`、`INC_DIR`、`OBJ_DIR`、`BIN_DIR`分别表示源文件目录、头文件目录、中间文件目录、目标文件目录。`SRCS`、`OBJS`、`TARGET`分别表示源文件列表、中间文件列表、目标文件列表。`CFLAGS`和`LDFLAGS`分别表示编译选项和链接选项。`all`规则表示编译目标文件,依赖于中间文件,链接生成可执行文件。`$(TARGET)`规则表示目标文件规则,依赖于中间文件,链接生成可执行文件。`$(OBJ_DIR)/%.o`规则表示中间文件规则,依赖于源文件和头文件,编译生成中间文件。`clean`规则表示删除所有中间文件和可执行文件。
阅读全文