You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:02:43