【问题标题】:"what does "make: *** [executable] Error 1" mean ?"““make: *** [executable] Error 1”是什么意思?
【发布时间】:2018-08-27 21:28:06
【问题描述】:

我制作了一个 makefile 来编译一个程序。我不知道它出了什么问题。

    CPP = gcc
    CXXFLAGS = -I. -std=gnu++2a
    DEPS = Robot.h gene_pool.h generate_matrix.h generate_rand_coordinates.h constants.h
    OBJS = gene_pool.o generate_matrix.o generate_rand_coordinates.o main.o Robot.o

    %.o: %.cpp $(OBJS) $(DEPS)
            $(CPP) -c -o $@ $< $(CXXFLAGS)

    robot: $(OBJS) $(DEPS)
            $(CPP) -o $@ $^ $(CXXFLAGS)

产生的错误信息:

      make: Circular gene_pool.o <- gene_pool.o dependency dropped.
    make: Circular generate_matrix.o <- gene_pool.o dependency dropped.
    make: Circular generate_matrix.o <- generate_matrix.o dependency dropped.
    make: Circular generate_rand_coordinates.o <- gene_pool.o dependency dropped.
    make: Circular generate_rand_coordinates.o <- generate_matrix.o dependency dropped.
    make: Circular generate_rand_coordinates.o <- generate_rand_coordinates.o dependency dropped.
    make: Circular main.o <- gene_pool.o dependency dropped.
    make: Circular main.o <- generate_matrix.o dependency dropped.
    make: Circular main.o <- generate_rand_coordinates.o dependency dropped.
    make: Circular main.o <- main.o dependency dropped.
    make: Circular Robot.o <- gene_pool.o dependency dropped.
    make: Circular Robot.o <- generate_matrix.o dependency dropped.
    make: Circular Robot.o <- generate_rand_coordinates.o dependency dropped.
    make: Circular Robot.o <- main.o dependency dropped.
    make: Circular Robot.o <- Robot.o dependency dropped.
    gcc -o robot gene_pool.o generate_matrix.o generate_rand_coordinates.o main.o Robot.o Robot.h gene_pool.h generate_matrix.h generate_rand_coordinates.h constants.h -I. -std=gnu++2a
    clang: error: cannot specify -o when generating multiple output files
    make: *** [robot] Error 1

我不明白大部分信息。和我的代码有关系吗?

【问题讨论】:

  • 你有循环依赖。您的目标文件不应相互依赖。
  • 问题。为什么gcc 命令行上有头文件?它们几乎从不打算直接编译。看起来您可能不清楚您的 DEPS 的用途。
  • @cHao:是的。我不清楚 DEPS 的用途。我认为他们应该在依赖列表中。

标签: c++ gcc makefile gnu


【解决方案1】:

让你动起来。

你可以通过删除一些东西来解决这个问题:

从此行中删除 OBJES

%.o: %.cpp $(OBJS) $(DEPS)

应该是这样的:

%.o: %.cpp         $(DEPS)

否则,每个目标文件都依赖于所有其他目标文件。这种依赖关系中会有循环,这就是错误消息所抱怨的。

所以一个目标文件依赖于它的源文件和源文件使用的头文件。它不太可能依赖于所有源文件,但它不会导致问题(只是它可能会比你想要的更频繁地强制重新编译)。

从此行中删除 DEPS

robot: $(OBJS) $(DEPS)

应该是这样的:

robot: $(OBJS)

可执行文件不需要依赖头文件。如果重新构建任何目标文件,则将重新构建可执行文件。所以额外的 DEPS 不会增加任何东西。

这不是一个完美的 Makefile,但它应该适用于您的用例。

【讨论】:

  • 编译后出现错误“架构x86_64的未定义符号:”...clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)我的代码有什么问题吗?我在 IDE 上编译,虽然很好
  • @w1583236 这意味着 make 文件很好并且正在工作。但这是不同的。错误所以提出一个新问题并尽可能具体。显示 make 错误(复制和粘贴)。它还应该显示它运行的命令,因此请手动运行该命令,然后使用-v 命令再次运行它以获取更多详细信息。将所有这些信息发布到新问题中。
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2018-01-30
  • 2020-05-03
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多