要求在Linux系统下编写一个Makefile文件使得编译的中间产品o文件放置在obj目录最终的可执行文件main放置在bin目录。另外要求Makefile中提供clean选项只要输入命令make clean可以将所有生成的o文件和可执行文件删除。
以下是符合要求的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:强制删除文件,不提示确认
原文地址: https://www.cveoy.top/t/topic/cutL 著作权归作者所有。请勿转载和采集!