Почему Makefiles в Linux так полезны? - PullRequest
7 голосов
/ 24 июля 2011

Я хочу знать, почему make-файлы в Linux так полезны (я имею в виду в практическом смысле). Почему мы не можем просто скомпилировать все наши программы обычным способом?

Ответы [ 6 ]

9 голосов
/ 24 июля 2011

normal way для Linux - использовать файл make.

Она возникла из всех ошибок, допущенных людьми при составлении все более сложных приложений вручную или с помощью самодельных сценариев. Нетривиально представлять зависимости сборки для сложного проекта. Make просто предлагает стандартизированный способ указания таких зависимостей и инструмент для анализа зависимостей и запуска связанных действий сборки.

Даже пользовательские интерфейсы, которые упрощают / автоматизируют процесс сборки для вас, используют файл make или что-то подобное за кулисами.

UPDATE

Для тех, кто интересуется комментариями автопроизводителя, вот два разных взгляда на тему

http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool

http://www.scurrilous.com/blog/archives/2005/08/23/i-hate-automake/

7 голосов
/ 24 июля 2011

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

 all: helloworld

, это одна строка, и (по крайней мере, gnu make) будет знать, что нужно запустить cc -o helloworld helloworld.c Затем, по мере роста проекта, вы добавите еще одно правило:

helloworld: ui.o xml.o mailcomponent.o
   $(CC) $(CFLAGS) -o $@ $@.c $^

и make знает, что нужно запустить

cc -c ui.c
cc -c xml.c
cc -c mailcomponent.c
cc -o helloworld helloworld.c ui.o xml.o mailcomponent.o

Затем скажите, что хотите изменить все.

CFLAGS=-O2

в начале файла позаботится о вас.

Когда проект становится больше, make следит за файлами, которые изменились и не изменились, предотвращая посторонние и трудоемкие перекомпиляции.

Makefile - замечательная экономия времени, и ядаже не коснулся более продвинутых рецептов.

7 голосов
/ 24 июля 2011

Поскольку обычный способ включает в себя повторение и может быть легко набран неверно, особенно когда команды становятся длиннее и многочисленнее, и появляется больше зависимостей. Создание make-файла означает, что по крайней мере все, что нужно сделать, это запустить make, а затем, необязательно, make install.

3 голосов
/ 24 июля 2011

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

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

Файл makefile хранитперечислите «входные» файлы, «выходные» файлы и «команды», необходимые для получения выходных данных с учетом ввода.Когда вы вносите изменения в проект, команда make проверит дату входных файлов с датой соответствующих выходных файлов, и если входные файлы были изменены, она заново создаст соответствующий вывод, выполнив команду.

Это, конечно, очень грубое описание, поскольку make гораздо более сложна, чем эта (топологическая сортировка, макрокоманды, параллельное выполнение) ... но она должна дать вам представление.

Перестройка всегона каждое изменение уходит слишком много времени, и восстановление вручную только того, что необходимо, подвержено ошибкам (если вы забудете отбросить кусок, вы можете подумать, что внесенное вами изменение в порядке, хотя на самом деле оно нарушает то, что вы просто сделалине перекомпилировать).

Обратите внимание, что сегодня существует множество систем сборки, гораздо более сложных, чем make-файлы (которые, например, генерируют make-файлы автоматически, анализируя вашу платформу и исходный код).

Это те инструментыэто серебряная пуля или решениепоиск проблемы сомнителен (я склонен к этому, потому что я ненавижу инструменты сборки, а они ненавидят меня ... каким-то образом их логика автоопределения никогда не работает правильно на моих машинах).

1 голос
/ 24 июля 2011

Сложность и время.Средне / крупномасштабный проект содержит сотни файлов с сотнями зависимостей.Вы хотите запомнить их всех?При ручной сборке проекта легко ошибиться.Вы можете легко забыть одну зависимость.И для создания большого проекта может потребоваться несколько минут.Make отслеживает время и перекомпилирует только те вещи, которые необходимы, чтобы вам не пришлось ждать несколько минут во время разработки.

0 голосов
/ 25 июля 2011

Обычным способом является использование make-файлов.

Это полезно, потому что оно было разработано как инструмент именно для этой цели :-) Вот почему это также нормальный способ.: -)

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