【问题标题】:no rule to make target 'Main.o', needed by 'Main' . Stop没有规则来制作 'Main' 需要的目标 'Main.o'。停止
【发布时间】:2021-05-12 10:37:05
【问题描述】:

注意:与其他问题不同,这个问题缺少 obj 文件而不是 cpp 文件

我有一个名为 /Profiler 的目录 得到以下文件:

  • Main.cpp
  • Draw.cpp
  • Draw.h(用于两个 cpp 文件)
  • 生成文件

我创建了以下 Makefile:

CC := g++
CCOPTS=-Wall -Wextra -O3 -std=c++17

Main_DEP_OBJ := Main.o Draw.o
Header:=Draw.h

all: main

%.o: %.C DEPS $(Header)
    $(CC) ${CCOPTS} -c -o $@ $<

Main: $(Main_DEP_OBJ)
    ${CC} ${CCOPTS} -o main $^

clean:
    rm -f Main *.o

在 Ubuntu 中使用 make 命令给我这个错误:

no rule to make target 'Main.o', needed by 'Main' . Stop.

【问题讨论】:

  • 确保缩进是制表符而不是空格。
  • 是的,在发布 Q 之前已经检查过了,我认为这是一个缩进问题,但事实并非如此。
  • 您发布的makefile不包含Main目标,因此如果您尝试构建它,它会输出一个完全不同的错误(它会输出no rule to make target 'main' needed by 'all' . Stop。所以你是要么不使用这个makefile,或者你从makefile中截断了一些东西。无论如何,%.o : %.cpp 模式规则可以解决你的问题,只要makefile可以看到Main.c。
  • 花几个小时阅读GCCGNU make 的文档.....研究开源C++ 项目的源代码,如FLTKRefPerSys。考虑为您的游戏软件使用SFML

标签: c++ linux ubuntu makefile game-development


【解决方案1】:

您没有 Main 的目标规则,或从 .cpp 文件构建 .o 文件。

CC := g++
CCOPTS=-Wall -Wextra -O3 -std=c++17

Main_DEP_OBJ := Main.o Draw.o
Header:=Draw.h

all: Main 

%.o: %.cpp $(Header)
    $(CC) ${CCOPTS}  -c -o $@  $<

Main: $(Main_DEP_OBJ)
    ${CC} ${CCOPTS} -o Main $^

clean:
    rm -f Main *.o

【讨论】:

  • 文件和makefile文本是否如上所示大写?
  • 对我有用,假设文件根据您的问题和我的 makefile 大写
  • 是的,它们都是大写的(就像 Makefile 和我在 Q 中展示的那样)
  • @ShifraSec 也许您可以使用更新的 makefile 更改来更新问题向我们显示ls 的输出,以便我们可以准确地看到文件。您的规则中有.cpp 而不是.CPP(在您的原始帖子中,您的文件类型和大小写错误)
  • 还有其他文件吗?也许是小写的makefile?
猜你喜欢
  • 2014-06-07
  • 1970-01-01
  • 2012-02-14
  • 2014-02-21
  • 2021-12-20
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多