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

Makefile报错:无规则生成目标cardemo.o,求解决方案

解决Makefile错误:No rule to make target cardemo.o

错误原因

你遇到的make: *** No rule to make target cardemo.o, needed by cardemo.exe. Stop错误,核心原因是你的Makefile只定义了最终可执行文件cardemo.exe依赖cardemo.o,但没有告诉Make如何生成cardemo.o目标文件。

修复方案

有两种简单可行的修复方式:

方式1:利用Make的默认编译规则

Make内置了一套默认规则,会自动将同目录下的.c源文件编译为对应的.o文件,前提是你的源文件名为cardemo.c。你可以保留现有结构,补充编译选项让过程更规范:

#Makefile for djgpp

ALLEG  =-lalleg  # 后续需要Allegro库时取消注释
CC     =gcc
CFLAGS =-Wall -O2  # 开启编译警告、启用优化(可选)

OBJECTS = cardemo.o

all:    cardemo.exe

cardemo.exe:$(OBJECTS)
    $(CC) $(OBJECTS) $(ALLEG) -o $@ 

clean:
    del *.o
    del cardemo.exe 

方式2:显式编写编译规则

如果想更清晰地控制编译流程,可以手动添加生成cardemo.o的规则:

#Makefile for djgpp

#ALLEG  =-lalleg
CC     =gcc

OBJECTS = cardemo.o

all:    cardemo.exe

# 显式定义生成cardemo.o的规则
cardemo.o: cardemo.c
    $(CC) -c cardemo.c -o $@  # -c参数表示只编译不链接

cardemo.exe:$(OBJECTS)
    $(CC) $(OBJECTS) $(ALLEG) -o $@ 

clean:
    del *.o
    del cardemo.exe 

额外注意点

  • 确保源文件cardemo.c和Makefile在同一目录下,且文件名拼写完全一致(Make对大小写敏感)。
  • 若后续需要使用Allegro库,记得取消ALLEG =-lalleg的注释,否则链接阶段不会加载库文件。
  • clean目标里的del是Windows/DJGPP环境的命令,若后续切换到类Unix环境,需替换为rm -f *.o cardemo.exe。

内容的提问来源于stack exchange,提问作者Mopower

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:15:33