以下是符合要求的Makefile文件:

CC = gcc
CFLAGS = -Wall -g
OBJDIR = obj
BINDIR = bin

SRC = main.c file1.c file2.c
OBJ = $(addprefix $(OBJDIR)/, $(SRC:.c=.o))
EXECUTABLE = $(BINDIR)/main

.PHONY: clean

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ)
	$(CC) $(CFLAGS) $^ -o $@

$(OBJDIR)/%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f $(OBJDIR)/*.o $(EXECUTABLE)

解释:

  • CC:编译器命令,默认为gcc
  • CFLAGS:编译选项,包括-Wall表示显示所有警告信息,-g表示生成调试信息。
  • OBJDIR:存放中间文件(.o文件)的目录。
  • BINDIR:存放可执行文件的目录。
  • SRC:源代码文件列表。
  • OBJ:中间文件列表,通过addprefix函数和$(SRC:.c=.o)转换得到。
  • EXECUTABLE:可执行文件路径。
  • all:默认目标,生成可执行文件。
  • $(EXECUTABLE):依赖中间文件列表,通过编译链接生成可执行文件。
  • $(OBJDIR)/%.o:模式规则,表示将所有.c文件编译成.o文件并存放在中间文件目录中。
  • clean:伪目标,用于清除中间文件和可执行文件。
  • rm -f:强制删除文件,不提示确认
要求在Linux系统下编写一个Makefile文件使得编译的中间产品o文件放置在obj目录最终的可执行文件main放置在bin目录。另外要求Makefile中提供clean选项只要输入命令make clean可以将所有生成的o文件和可执行文件删除。

原文地址: https://www.cveoy.top/t/topic/cutL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录