Возможно, нам придется принять это поэтапно.
Во-первых, вы, похоже, неправильно понимаете разницу между makefile name и target имя. Похоже, что это было недопонимание между вами и вашим учителем, но это легко устранить.
Предположим, у вас есть make-файл с именем "Makefile", содержащий следующее:
foo:
@echo running the foo rule
bar:
@echo running the bar rule
Если Вы make foo
, вы получите:
running the foo rule
Аргумент (foo
) указывает Make, какую цель пытаться построить. И как Make узнал, какой make-файл использовать? (В конце концов, вы можете иметь дюжину make-файлов в рабочем каталоге.) Вы можете указать, какой make-файл использовать, но если вы этого не сделаете, то по умолчанию Make будет искать make-файл с именем Makefile
(или makefile
или GNUmakefile
, пока не беспокойтесь об этом). Чтобы указать make-файл с другим именем, например, «Buildfile», вы можете использовать флаг -f
:
make -f Buildfile
Так что «p1» должно быть именем цели , не make-файл. В make-файле переименуйте правило a.out
в p1
. Затем переименуйте весь make-файл в Makefile
. Тогда
make p1
должно сработать (или хотя бы запустить).
Редактировать:
Я go выйду на конечности. В правиле a.out
(которое теперь должно называться правилом p1
) я заметил, что вы оставили P1LinkedList.o
в списке объектных файлов, которые нужно связать. Поэтому попробуйте изменить его:
p1: main.o P1LinkedList.o const_iterator.o iterator.o Node.o
g++ -std=c++11 main.o P1LinkedList.o const_iterator.o iterator.o Node.o
Если это работает, вы можете упростить его с помощью automati c variable :
p1: main.o P1LinkedList.o const_iterator.o iterator.o Node.o
g++ -std=c++11 $^
И будут другие небольшие улучшения, которые вы можете сделать.
Если это не не работает, попробуйте ls *.cpp
и посмотрите, пропустили ли вы другой исходный файл.