Ваша проблема в том, что вы используете неправильную команду. Я бы добавил следующую строку в начало вашего make-файла:
all: reservations.out
Затем просто введите make
в командной строке. Если вы не хотите редактировать файл, просто используйте make reservations.out
, и вы должны получить правильное поведение.
Что касается файла .o
: это файл объекта, то есть он содержит скомпилированный (но в данном случае не связанный) код. Ваше окончательное правило make-файла берет объектные файлы и связывает их вместе в конечный исполняемый файл с именем reservations.out
.
Теперь, когда я посмотрю еще немного, похоже, что у вас есть странное поведение в отношении вашего последнего правила. Я думаю, это должно выглядеть больше как:
reservations.out: main.o flight.o passenger.o
gcc -Wall -g main.o flight.o passenger.o -o reservations.out
Кроме того, у вас есть passenger.o
в качестве предпосылки passenger.o
, что наверняка вызовет у вас проблемы. Я хотел бы сделать что-то вроде этого (это может быть даже труднее, но я пытаюсь сделать это просто):
.PHONY: all clean
all: reservations.out
flight.o: flight.c flight.h
gcc -Wall -g -c flight.c
passenger.o: passenger.c passenger.h
gcc -Wall -g -c passenger.c
main.o: main.c
gcc -Wall -g -c main.c
reservations.out: main.o flight.o passenger.o
gcc -Wall -g main.o flight.o passenger.o -o reservations.out
clean:
rm -f *.o reservations.out
Но то, что я бы действительно сделал, если вы хотите узнать немного подробнее, ниже. Это может быть немного излишним для такого маленького проекта, но его также легче настроить и настроить при необходимости.
.PHONY: all clean
BIN = reservations
OBJ = flight.o passenger.o main.o
all: $(BIN)
%.o: %.c %.h
gcc -Wall -g -c $<
main.o: main.c
gcc -Wall -g -c $<
$(BIN): $(OBJ)
gcc -Wall -g -o $@ $^
clean:
rm -f $(OBJ) $(BIN)
Я рекомендую ознакомиться с инструкцией GNU make , чтобы узнать больше обо всех необычных вещах, которые вы можете сделать.