c++ - ““make: *** [executable] Error 1”是什么意思?
问题描述
我制作了一个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
我不明白大部分的消息。它与我的代码有什么关系吗?
解决方案
让你动起来。
你可以通过删除一些东西来解决这个问题:
从此行中删除 OBJES
%.o: %.cpp $(OBJS) $(DEPS)
应该看起来像:
%.o: %.cpp $(DEPS)
否则,每个目标文件都依赖于所有其他目标文件。这种依赖关系中会有循环,这就是错误消息所抱怨的。
所以一个目标文件依赖于它的源文件和源文件使用的头文件。它不太可能取决于所有源文件,但它不应该引起问题(只是它可能会比你想要的更频繁地强制重新编译)。
从此行中删除 DEPS
robot: $(OBJS) $(DEPS)
应该是这样的:
robot: $(OBJS)
可执行文件不需要依赖于头文件。如果重新构建任何目标文件,则将重新构建可执行文件。所以额外的 DEPS 不会增加任何东西。
这不是一个完美的 Makefile,但它应该适用于您的用例。
推荐阅读
- java - 我怎样才能让这个程序返回一个结果?
- c# - 使用 dinkToPdf 时无法解析 dot net core 2.0 Web 应用程序中的“SynchronizedConverter”
- python - 拆分地址的方法?多个分隔符?
- python - 使用 Prim 算法的最大生成树
- tshark - tshark,收集所有数据包流量后重新创建发布请求
- lua - 从表中提取所有键和值
- flutter - 应该只有一项具有 [DropdownButton] 的值:
- swift - 将鼠标悬停在分隔符上时,是否可以在 NSSplitView 中暂时禁用鼠标光标更改?
- c# - 如何仅在软件更新时初始化新值?
- rust - 由于需求冲突,推断寿命失败