Minix2下Makefile编译报错:第17行未提供目标求助
问题:Minix2编译时Makefile报错
make: No targets provided in Makefile near line 17 编译文件时反复触发错误:
make: No targets provided in Makefile near line 17
对应的Makefile内容如下:
CC = cc CFLAGS = -O -D_MINIX -D_POSIX_SOURCE PROG1 = main PROG2 = functions PROG3 = superblock PROG4 = inode OBJ1 = main.o OBJ2 = functions.o OBJ3 = superblock.o OBJ4 = inode.o all: $(PROG1) $(PROG2) $(PROG3) $(PROG4) $(PROG1): $(OBJ1) $(CC) $(CFLAGS) -o $(PROG1) $(OBJ1) <--- line 17 $(PROG2): $(OBJ2) $(CC) $(CFLAGS) -o $(PROG2) $(OBJ2) $(PROG3): $(OBJ3) $(CC) $(CFLAGS) -o $(PROG3) $(OBJ3) $(PROG4): $(OBJ4) $(CC) $(CFLAGS) -o $(PROG4) $(OBJ4) main.o: main.c $(CC) $(CFLAGS) -c main.c functions.o: functions.c $(CC) $(CFLAGS) -c functions.c superblock.o: superblock.c $(CC) $(CFLAGS) -c superblock.c inode.o: inode.c $(CC) $(CFLAGS) -c inode.c clean: rm -f *.o $(PROG1) $(PROG2) $(PROG3) $(PROG4) .PHONY: all clean
错误原因及修复方案
1. 移除命令行末尾的非法标记
第17行命令末尾的 <--- line 17是手动添加的标记,Minix的make会将其视为编译命令的一部分,直接导致语法解析失败。必须删除该标记,恢复命令行的正确格式:
$(PROG1): $(OBJ1) $(CC) $(CFLAGS) -o $(PROG1) $(OBJ1)
2. 确认缩进为Tab键
Minix的make对缩进有严格要求:所有命令行(即$(CC)、rm等指令所在行)必须以单个Tab键开头,不能用空格替代。如果你的编辑器自动将Tab转为空格,需要调整编辑器设置,确保缩进为纯Tab。
3. 可选:简化Makefile减少冗余
可以通过make的通配规则简化重复代码,避免逐个定义编译规则:
CC = cc CFLAGS = -O -D_MINIX -D_POSIX_SOURCE PROGS = main functions superblock inode OBJS = $(PROGS:=.o) all: $(PROGS) # 通用可执行文件编译规则 %: %.o $(CC) $(CFLAGS) -o $@ $< # 通用目标文件编译规则 %.o: %.c $(CC) $(CFLAGS) -c $< clean: rm -f $(OBJS) $(PROGS) .PHONY: all clean
内容的提问来源于stack exchange,提问作者Ivashchenko Matvii
相关产品推荐
相关产品推荐

