"что" значит: *** [исполняемый файл] Ошибка 1 "значит?" - PullRequest
0 голосов
/ 28 августа 2018

Я сделал make-файл для компиляции программы. Я не знаю, что случилось с этим.

    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

Я не понимаю большую часть сообщения. Это как-то связано с моим кодом?

1 Ответ

0 голосов
/ 28 августа 2018

Чтобы вы двигались.

Вы можете исправить это, удалив некоторые вещи:

Из этой строки удалить OBJES

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

должно выглядеть так:

%.o: %.cpp         $(DEPS)

В противном случае каждый объектный файл зависит от всех других объектных файлов. В этой зависимости будут циклы, на которые жалуется сообщение об ошибке.

Таким образом, объектный файл зависит от его исходного файла и заголовка, который использует исходный файл. Маловероятно, что это зависит от всех исходных файлов, но это не должно вызывать проблем (просто это может вызвать перекомпиляцию чаще, чем вам бы хотелось).

Из этой строки удалить DEPS

robot: $(OBJS) $(DEPS)

Должно выглядеть так:

robot: $(OBJS)

Исполняемый файл не должен зависеть от заголовочных файлов. Если какой-либо из объектных файлов будет перестроен, то исполняемый файл будет перестроен. Таким образом, дополнительный DEPS ничего не добавляет.

Это не идеальный Makefile, но он должен работать для вашего варианта использования.

...