Intereting Posts
Вызов собственного С, скомпилированного с VS 2005 из C ++ / CLI Visual studio 2010 – Не удается открыть .lib-файл … Являются ли составные утверждения lvalue (или rvalue) в C? Почему компилятор видит несоответствие между char * и спецификатором преобразования printf «s», когда char * typedef’d и доступен через структуру? Как найти ошибку сегментации из нескольких файлов с помощью GDB Получить длину массива с помощью указателя Зачем использовать C? Как найти длину argv в C Не удалось прочитать строки из файла на C и манипулировать ими как discamler lc3 Приоритет и приоритет логических операторов Как получить прямой доступ к необработанным данным HD в C? Анализ файла iCalendar в C как сделать две строки массива в одну строку массива в C Как связать случай массива char и с указателем char в C? добавьте строку «\\? \» в путь – DriverPackageUninstall Как принимать только определенную точность (так много десятков знаков) в scanf?

Как именно я могу использовать make-файл?

Я действительно смущен в данный момент.

Итак, у меня есть 5 файлов: main.c, flight.c, flight.h, пассажир.c и пассажир.h

Flight.h имеет прототипы функций для flight.c, а у пассажира.h есть прототипы функций для пассажира.c

flight.c и пассажир.c имеют определения для этих функций.

main.c – это программа, с которой я буду взаимодействовать, вызывающие функции из обоих файлов .c

Я не совсем уверен, что такое файлы .o, кто-нибудь, пожалуйста, объясните? Вот мой Makefile:

flight.o: flight.c flight.h gcc -Wall -g -c flight.c passenger.o: passenger.c passenger.o 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 flight.o passenger.o main.o -o reservations.out 

EDIT: Затем я использую команду «make Makefile» и получаю сообщение об ошибке: make: ничего не нужно делать для `Makefile ‘.

В моем файле есть вкладка перед gcc. Я был бы признателен за любую помощь, я уверен, что есть много вещей, которые я делаю неправильно. Благодарю.

Ваша проблема в том, что вы используете неправильную команду. Я бы добавил следующую строку в начало вашего файла makefile:

 all: reservations.out 

Затем просто введите make в командной строке. Если вы не хотите редактировать файл, просто используйте make reservations.out и вы должны получить правильное поведение.

Что касается файла .o : это файл «object», то есть он содержит скомпилированный (но в этом случае не связанный) код. Ваше окончательное правило 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, чтобы узнать больше о всех полезных материалах, которые вы можете сделать.

Я не совсем уверен, что такое файлы .o, кто-нибудь, пожалуйста, объясните?

.o – это объектные файлы, временные файлы, которые создаются компилятором, который содержит объектный код для classа. Объектные коды будут связаны компоновщиком для создания исполняемого двоичного файла.

make имеет неявные правила для создания двоичных файлов из источника C, вам не нужно указывать для этого явные правила.

Таким образом, ваш минималистический Makefile будет выглядеть так:

 CFLAGS = -Wall -g .PHONY all clean all: myprogram myprogram: source1.c source2.c clean: rm -f myprogram 

Он имеет один полезный побочный эффект: все файлы-посредники ( *.o файлы в вашем случае) будут автоматически удалены после компиляции.

Параметры из CFLAGS будут добавлены в командную строку gcc – это make неявное правило.