|
Make, ускорение процесса сборки проектов |
|
|
|
Aug 28 2012, 13:34
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(AHTOXA @ Aug 24 2012, 11:03)  Я считаю это большой глупостью авторов make. Вот что-то мне в этой фразе не понравилось :-) Это 50% пинка, вся остальная тема — ещё 50% Всем спасибо, пинок застаивл еще раз заглянуть в документацию :-) Код .NOTPARALLEL: start dirs clean reset OK :-( Тьху, не оно :-( Разница во времени на мелком проекте небольшая и линкеовка с LTO занимает около половины, без LTO и с time стало хорошо видно, что полностью. отрубается параллельность. Ну и не дочитался сразу, что зависимости к этой цели по барабану, главное, что она есть в Makefile. Ну, значит, нужен feature request на .SEQUENTIAL и доброволец на реализацию :-) Всё равно было полезно поговорить :-) сlean я делаю отдельно вручную. Но прошёлся по более-менее актуальным для себя Makefile, в одном старом было rebuild, в нескольких других (все в примерах scmRTOS) цель build. Заменил на уже предложенное мной Код build: $(MAKE) clean $(MAKE) В том числе во всех CortexM3/GCC примерах и вбросил изменения в репозиторий.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Sep 10 2012, 10:21
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(ReAl @ Aug 28 2012, 17:34)  Код build: $(MAKE) clean $(MAKE) Скажите, пожалуйста, в чем смысл в цели build _всегда_ делать clean? Если меняется код только в одном файле, то компилировать надо только его, а линковать всё, но в этом случае пересобирается весь проект. Время сборки увеличивается.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Sep 10 2012, 17:40
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(AHTOXA @ Sep 10 2012, 15:28)  Потому что цель такая - полная пересборка. Для выборочной пересборки, о которой вы говорите, есть цель all. Цитата из makefile_template для Winavr Код # Default target. all: begin gccversion sizebefore build sizeafter end
# Change the build target to build a HEX file or a library. build: elf hex eep lss sym #build: lib Мне понятно, что цель build является частью общей цели all. На мой взгляд логично исходя из названия целей. Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе?
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Sep 10 2012, 22:37
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-10
Пользователь №: 56 826

|
Мне кажется существенным выгрышем по сборке было бы использование чего нить такого, что не заставляет пересобирать ВЕСЬ проект.
1. файлы зависимостей *.d 2. выделение части проекта в статические библиотеки 3. Linux как-то быстрее собирает (ну это наверное совсем координальное решение) windows ещё со времён дискетки как-то не любит кучи мелких файлов да и антивирусник тут постоянно вмешивается.
можно в ручную писать make a можно ещё какие средства для его генерации использовать студии разработки и стемы типа CMAKE и не сильно ломать
|
|
|
|
|
Sep 11 2012, 02:26
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(mdmitry @ Sep 10 2012, 20:40)  Цитата из makefile_template для Winavr ... Мне понятно, что цель build является частью общей цели all. На мой взгляд логично исходя из названия целей. Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе? "иначе" -- это цель, которую можно было бы назвать rebuild («Потому что цель такая - полная пересборка.») назвать все-таки build ? Ну, например, потому, что человек считает простой вызов make -- так, по дороге отладочным. А вот когда нужно сделать build программы (пишут же «XXX version YYY build ZZZ» а не «rebuild ZZZ»), то тогда и вызывается make build. Впрочем, я сам больше склоняюсь к имени rebuild :-) Кстати, по поводу make clean all и -j. Code::Blocks по кнопке «пересобрать» сам последовательно запускает make clean и make, поэтому ничего и не вылазит :-) Цитата(Дмитриос @ Sep 11 2012, 01:37)  Мне кажется существенным выгрышем по сборке было бы использование чего нить такого, что не заставляет пересобирать ВЕСЬ проект. А никто тут и не пересобирает ВЕСЬ проект при каждом изменении одной буквы в листовом файле проекта. Это так, в нескольких сообщениях обсуждается название цели, которая используется для (выделенной в отдельную цель, нечастой, осознанно вызываемой) полной пересборки.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Sep 11 2012, 02:46
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(mdmitry @ Sep 10 2012, 23:40)  Код # Default target. all: begin gccversion sizebefore build sizeafter end Как мы недавно выяснили, это работает криво. Цитата(mdmitry @ Sep 10 2012, 23:40)  Мне понятно, что цель build является частью общей цели all. На мой взгляд логично исходя из названия целей. Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе?  Дело в том, что я не читал "makefile_template для Winavr", когда писал этот makefile. И мне показалось логичным, что вызов "make" пересобирает только изменившиеся файлы, а вызов "make build" - полностью пересобирает проект. Цитата(ReAl @ Sep 11 2012, 08:26)  Впрочем, я сам больше склоняюсь к имени rebuild :-) build - короче  Я сейчас задумался, почему build. Решил, что это из борланд паскаля, там было Make (F9) и Build.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 11 2012, 07:13
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(AHTOXA @ Sep 11 2012, 06:46)  Как мы недавно выяснили, это работает криво. Так наверно по аналогии: Код all: $(MAKE) begin $(MAKE) gccversion $(MAKE) sizebefore $(MAKE) build $(MAKE) sizeafter $(MAKE) end Цель build аналогично. Надо проверять, это предположение. Добавлю по названиям целей: в makefile файлах, которые я видел (linux) отдельно имелась цель clean и она не вызывалась автоматически при пострении проекта. Для сборки ядра всегда руками вызываю make clean. Наверно, у меня с linux'а сформировались стереотипы по названиям целей. Дискуссию на эту тему можно и закрыть. Дело в названии.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Sep 12 2012, 08:46
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
all и clean и так есть. Речь про Код build: clean all Вернее, теперь уже Код build: $(MAKE) clean $(MAKE) all
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|