реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Make, ускорение процесса сборки проектов
AHTOXA
сообщение Aug 28 2012, 06:01
Сообщение #31


фанат дивана
******

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



Цитата(e-serg @ Aug 28 2012, 11:30) *
более 20 лет, этот ключик "-j", у gnu make существует, новым его не назвать.

Я и не называл его новым. И появился он таки далеко не сразу. Так что всё чёткоsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 28 2012, 13:34
Сообщение #32


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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 примерах и вбросил изменения в репозиторий.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 28 2012, 15:32
Сообщение #33


фанат дивана
******

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



Цитата(ReAl @ Aug 28 2012, 19:34) *
Тьху, не оно :-(

Угу, это я уже тоже смотрелsad.gif
Цитата(ReAl @ Aug 28 2012, 19:34) *
В том числе во всех CortexM3/GCC примерах и вбросил изменения в репозиторий.

Спасибо!


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MBR
сообщение Sep 4 2012, 07:35
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Где-то в гентушных факах рекомендовалось устанавливать значение -j в 2 * N + 1, где N - количество независимых потоков.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 10 2012, 10:21
Сообщение #35


Начинающий профессионал
*****

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



Цитата(ReAl @ Aug 28 2012, 17:34) *
Код
build:
    $(MAKE) clean
    $(MAKE)

Скажите, пожалуйста, в чем смысл в цели build _всегда_ делать clean? Если меняется код только в одном файле, то компилировать надо только его, а линковать всё, но в этом случае пересобирается весь проект. Время сборки увеличивается.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 10 2012, 11:28
Сообщение #36


фанат дивана
******

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



Цитата(mdmitry @ Sep 10 2012, 16:21) *
Скажите, пожалуйста, в чем смысл в цели build _всегда_ делать clean?

Потому что цель такая - полная пересборка. Для выборочной пересборки, о которой вы говорите, есть цель all.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 10 2012, 17:40
Сообщение #37


Начинающий профессионал
*****

Группа: Свой
Сообщений: 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. На мой взгляд логично исходя из названия целей.
Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе?


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Дмитриос
сообщение Sep 10 2012, 22:37
Сообщение #38


Участник
*

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



Мне кажется существенным выгрышем по сборке было бы использование чего нить такого, что не заставляет пересобирать ВЕСЬ проект.

1. файлы зависимостей *.d
2. выделение части проекта в статические библиотеки
3. Linux как-то быстрее собирает (ну это наверное совсем координальное решение) windows ещё со времён дискетки как-то
не любит кучи мелких файлов да и антивирусник тут постоянно вмешивается.

можно в ручную писать make a можно ещё какие средства для его генерации использовать
студии разработки и стемы типа CMAKE и не сильно ломать
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 11 2012, 02:26
Сообщение #39


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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) *
Мне кажется существенным выгрышем по сборке было бы использование чего нить такого, что не заставляет пересобирать ВЕСЬ проект.
А никто тут и не пересобирает ВЕСЬ проект при каждом изменении одной буквы в листовом файле проекта. Это так, в нескольких сообщениях обсуждается название цели, которая используется для (выделенной в отдельную цель, нечастой, осознанно вызываемой) полной пересборки.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 11 2012, 02:46
Сообщение #40


фанат дивана
******

Группа: Свой
Сообщений: 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. На мой взгляд логично исходя из названия целей.
Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе?

sm.gif Дело в том, что я не читал "makefile_template для Winavr", когда писал этот makefile. И мне показалось логичным, что вызов "make" пересобирает только изменившиеся файлы, а вызов "make build" - полностью пересобирает проект.
Цитата(ReAl @ Sep 11 2012, 08:26) *
Впрочем, я сам больше склоняюсь к имени rebuild :-)

build - корочеsm.gif
Я сейчас задумался, почему build. Решил, что это из борланд паскаля, там было Make (F9) и Build.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 11 2012, 07:13
Сообщение #41


Начинающий профессионал
*****

Группа: Свой
Сообщений: 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'а сформировались стереотипы по названиям целей. Дискуссию на эту тему можно и закрыть. Дело в названии.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
MBR
сообщение Sep 12 2012, 06:32
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



я тоже плюсую за all и clean. Причем, не забываем добавлять в .PHONY. Как-то устоявшийся стандарт.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 12 2012, 08:46
Сообщение #43


фанат дивана
******

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



all и clean и так есть. Речь про
Код
build: clean all

Вернее, теперь уже
Код
build:
    $(MAKE) clean
    $(MAKE) all


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016