2013-10-26 3 views
0

Я пытаюсь понять makefile. У меня есть следующие файлы:Создание make-файла с зависимостями

main.c 
(includes progA.c progB.c progC.c) 

progA.c 
(includes progA.h) 

progB.c 
(includes progA.c) 

progC.c 

Я пытался создать Makefile, но не уверен, если это правильно или нет:

main.o: main.c progA.o progB.o progC.o 
    gcc -c main.c 

progA.o: progA.c progB.o 
    gcc -c progA.c 

progB.o: progB.c progB.h 
    gcc -c progB.c 

progC.o: progC.c 
    gcc -c progC.c 

Может кто-нибудь, пожалуйста, помогите мне понять. Я попытался посмотреть учебники, но есть другая информация.

Также, как я могу запустить этот тест?

+2

Сохраните файл как 'makefile', для запуска использовать' make' команду. – deepmax

+0

Каким образом 'progB.c' включает' progA.c'? – PhillipD

+0

progB.c использует одну из функций progA.c – CocaCola

ответ

1

для вашей проблемы, следующий Makefile должен делать эту работу. Вы можете запустить сборочный файл, просто набрав make или make -f <name_of_makefile> если ваш Makefile имеет пользовательское имя (например build_main)

all: main 

main: main.o progA.o progB.o progC.o 
    gcc -o main main.o progA.o progB.o progC.o 

main.o: main.c  
    gcc -c main.c 

progA.o: progA.c 
    gcc -c progA.c 

progB.o: progB.c 
    gcc -c progB.c 

progC.o: procC.c 
    gcc -c progC.c 

Для создания исполняемого файла, объекты main.o progA.o progB.o progC.o необходимы, как указано в строке после main:.

Правила составления main.o progA.o progB.o и progC.o приведены следующими четырьмя разделами.

Общий формат Makefile является

target: dependencies 
[tab] system command 
0

это выглядит странно:

progA.o: progA.c progB.o 
    gcc -c progA.c 

обычно Makefile- «линия» имеет три составляющие:

  • цель: это должно быть результатом выполнения командной строки. Одна трагедия - это специальная цель, а именно первая; обычно это называется «все» и зависит от основной цели (например, исполняемый файл).
  • зависимости: это все файлы, которые используются для создания цели в командной строке, явные, как исходный конец файла, неявный, как #include файлы
  • командной строки: команда для создания цели из depentant файлов
Смежные вопросы