правила для make-файла - PullRequest
       9

правила для make-файла

0 голосов
/ 30 сентября 2010

давайте предположим, что у меня есть некоторый Makefile для Unix

prog:a.o b.o c.o
    gcc a.o b.o c.o -o prog
a.o:a.c a.h b.h
    gcc -c a.c
b.o:b.c b.h
    gcc -c b.c
c.o:c.c c.h b.h
    gcc -c c.c

Я прочитал, что если я изменяю * .c файл, я должен перекомпилировать только этот файл, но если я изменяю * .h файл, я должен перекомпилировать все файлы, которые зависят от моего * .h файла, после обоих случаев в любом случае I must link все файлы с начала

1) давайте предположим, что я меняю только b.h, так что мне нужно делать? мой вариант make a.o b.o c.o я прав?

2) давайте предположим, что я изменяю только c.c, так что мне нужно делать? мой вариант make c.o я прав?

и, наконец, если я напишу make c.o например мой make-файл ONLY recompile c.o но what about linker? У меня только gcc -c c.c а не -o

заранее спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

Что именно вы имеете в виду «что мне нужно делать?».В любом случае, просто запустите make prog, и пусть make это выяснит, вот и весь смысл.

РЕДАКТИРОВАТЬ: Если вам интересно, что будет делать make в каждом случае, при условии, что вы запускаете make prog каждый раз читайте дальше:

В случае 1) bh изменилось, поэтому все, что зависит от него (ao, bo и co), будет перестроено, а прога будет перекомпонована.

Incase 2) co является только прямой зависимостью cc, поэтому только co создается и повторно связывается с prog.

Кстати, gcc может дать вам понять, что вы зависите, просто запустив gcc -MM *.c в каталоге вашего проекта.

1 голос
/ 30 сентября 2010

Во всех случаях вы просто делаете

make prog

или просто

make

Идея создания Makefile заключается в том, что make может проверять зависимости, выяснить, что устарело, и выполнить только необходимую перекомпиляцию (и не более).

Если вы измените файл .c, очевидно, что он собирается перекомпилировать этот файл .c, и, поскольку он обновляет файл .o, от которого зависит prog, он также будет связан с prog.

Если вы измените файл .h, это вызовет перекомпиляцию одного или нескольких файлов .c, что также приведет к повторному связыванию prog.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...