““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()迭代数据集
解决使用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的问题(代码