““make: *** [executable] Error 1”是啥意思?

Posted

技术标签:

【中文标题】““make: *** [executable] Error 1”是啥意思?【英文标题】:"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 的用途。我认为他们应该在依赖列表中。 【参考方案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 命令再次运行它以获取更多详细信息。将所有这些信息发布到新问题中。

以上是关于““make: *** [executable] Error 1”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

python 在非Eager Execution模式下,可以使用make_one_shot_iterator()迭代数据集

Graphviz典型例子

解决使用Monitor出现gym.error.DependencyNotInstalled: Found neither the ffmpeg nor avconv executables的问题

解决使用Monitor出现gym.error.DependencyNotInstalled: Found neither the ffmpeg nor avconv executables的问题

解决使用Monitor出现gym.error.DependencyNotInstalled: Found neither the ffmpeg nor avconv executables的问题(代码

Makefile 没有产生预期的文件输出