我制作了一个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
我不明白大部分信息。与我的代码有关系吗?
答案 0 :(得分:0)
让您动起来。
您可以通过删除一些内容来解决此问题:
从此行中删除对象
%.o: %.cpp $(OBJS) $(DEPS)
应该像这样:
%.o: %.cpp $(DEPS)
否则,每个目标文件都依赖于所有其他目标文件。在这种依赖关系中会出现循环,这就是错误消息所抱怨的。
因此,目标文件取决于其源文件和源文件使用的标头。它不太可能依赖于所有源文件,但不会引起问题(只是它可能会迫使重新编译的次数超出您的意愿)。
在此行中删除DEPS
robot: $(OBJS) $(DEPS)
应如下所示:
robot: $(OBJS)
可执行文件不需要依赖头文件。如果任何目标文件被重建,那么可执行文件将被重建。因此,额外的DEPS不会添加任何内容。
这不是一个完美的Makefile,但它应该适合您的用例。