URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 108009
[ Назад ]

Исходное сообщение
"Выпуск системы сборки GNU Make 4.2"

Отправлено opennews , 22-Май-16 20:42 
После полутора лет разработки представлен (http://lists.gnu.org/archive/html/info-gnu/2016-05/msg00013....) релиз системы сборки GNU Make 4.2 (http://www.gnu.org/software/make/). Кроме исправления ошибок, в новой версии можно отметить следующие улучшения:

-  Добавлена новая переменная $(.SHELLSTATUS), в которой передаётся статус возврата последней функции "!= " или $(shell ...), вызванной из текущего экземпляра make. Ноль означает успешное выполнение, а иное другое значение - не успешное;

-  Функция $(file ...) теперь может читать из файла и при указании $(file ‹FILE) распространяется на содержимое файла;

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

-  Стабилизирован и документирован интерфейс "jobserver (http://tech-digby280.blogspot.com/2012/03/gnu-make-job-serve...)". Нарушена обратная совместимость:  внутренняя опция командной строки "--jobserver-fds" в итоговой спецификации опубликована как "--jobserver-auth";
-  Уровень распараллеливания сборки может быть определён через MAKEFLAGS, даже при включенном jobserver (ранее MAKEFLAGS не принимался во внимание при включении jobserver).

URL: http://lists.gnu.org/archive/html/info-gnu/2016-05/msg00013....
Новость: http://www.opennet.ru/opennews/art.shtml?num=44475


Содержание

Сообщения в этом обсуждении
"Выпуск системы сборки GNU Make 4.2"
Отправлено kachsheev , 22-Май-16 20:42 
Годно!

"Выпуск системы сборки GNU Make 4.2"
Отправлено Анончег , 22-Май-16 22:18 
Юный падаван имел в виду вот это?

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


"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 22-Май-16 22:30 
очевидно, юный падаван имел ввиду саму утилиту.
а номер строки make-файла - штука специфичная - у тов.Анонима, который я, за 13 лет разработки под никсы ни разу такой потребности не возникало.

"Выпуск системы сборки GNU Make 4.2"
Отправлено Анончег , 22-Май-16 22:52 
> я, за 13 лет разработки под никсы ни разу такой потребности не возникало.

Получается ребята напрасно старались раз тебе это не нужно?


"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 22-Май-16 23:42 
> Получается ребята напрасно старались раз тебе это не нужно?

Нет, получается, что сама make нужна бОльшему числу людей, чем отображение номеров строк.


"Выпуск системы сборки GNU Make 4.2"
Отправлено kachsheev , 22-Май-16 23:38 
Юный падаван имел в виду развие проекта в целом.
Пока для себя лучшей сисемы сборки не вижу, да и всё равно стандарт в никсах де-факто.

"Выпуск системы сборки GNU Make 4.2"
Отправлено Анончег , 23-Май-16 00:13 
> Юный падаван имел в виду развие проекта в целом.
> Пока для себя лучшей сисемы сборки не вижу, да и всё равно
> стандарт в никсах де-факто.

Ну вот теперь всё ясно и понятно, неужели было трудно с самого начала так же чётко сформулировать свою радостную эмоцию и не интриговать посетителей попусту.


"Выпуск системы сборки GNU Make 4.2"
Отправлено e , 24-Май-16 09:19 
Что такое подаван ?
Чем юный п. отличается от пожилого п. ?

"Выпуск системы сборки GNU Make 4.2"
Отправлено Какаянахренразница , 25-Май-16 09:23 
> Что такое подаван ?

Правописание хромает. Надо писать "подован". Проверочное слово: "корован".


"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 22-Май-16 21:08 
В каком веке будет корректная обработка правил с генерацией нескольких файлов?

"Выпуск системы сборки GNU Make 4.2"
Отправлено Кармер , 22-Май-16 22:54 
Тов Анонимус любит Fortran ??

"Выпуск системы сборки GNU Make 4.2"
Отправлено Анончег , 22-Май-16 22:58 
> Тов Анонимус любит Fortran ??

А что это запрещено? Даже про запреты фортран-парадов и пропаганды фортрана посреди подрастающего поколения ничего не слышно, а уж тем более на опеннетике.


"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 22-Май-16 23:39 
Нет, литературное программирование.

И просто глупо поддерживать совместимость с багами сорокалетней давности.


"Выпуск системы сборки GNU Make 4.2"
Отправлено kravich , 23-Май-16 06:23 
Скорее, Protocol Buffers. Там из одного .proto генерируются одновременно .cc и .h.

"Выпуск системы сборки GNU Make 4.2"
Отправлено dbfbmvdy7uet , 23-Май-16 11:27 
ЕМНИП в lex и yacc аналогично.

"Выпуск системы сборки GNU Make 4.2"
Отправлено anon2 , 23-Май-16 00:21 
> В каком веке будет корректная обработка правил с генерацией нескольких файлов?

пока не придумали специального синтаксиса для задания правил с генерацией нескольких целей одним правилом, но можно использовать уже имеющиеся возможности, например так (на примере работающего Makefile):

#######

# объявляем переменную-отсечку: если её значение переменной не пустое, значит правило генерации выполнено и ещё раз вызывать его не надо

check:=

# объявляем order-only зависимости между сгенерёнными файлами
# это нужно для того, чтобы задержать выполнение правил трансляции b1.c->b1.o и c1.c->c1.o до тех пор, пока не будет выполнена ре-генерация файлов a1.c, b1.c, c1.c из x.x (одним вызовом правила генерации нескольких целей) (при повторном вызове make после изменении x.x)

b1.c: | a1.c
c1.c: | b1.c

# правило генерации нескольких целей
# сгенерим a1.c, b1.c, c1.c из x.x одним вызовом touch a1.c b1.c c1.c
# установим переменную-отсечку, чтобы вызвать правило генерации только один раз
# не выполняем правило, если переменная-отсечка установлена

a1.c b1.c c1.c: x.x
    $(if $(check),,$(eval check:=1)touch a1.c b1.c c1.c)

# правила трансляции a1.c->a1.o, b1.c->b1.o и c1.c->c1.o

c1.o: c1.c
    touch $@
b1.o: b1.c
    touch $@
a1.o: a1.c
    touch $@

# основная цель
all: c1.o b1.o a1.o

clean:
    rm -f a1.c b1.c c1.c a1.o b1.o c1.o

.PHONY: all clean
.DEFAULT_GOAL := all


"Выпуск системы сборки GNU Make 4.2"
Отправлено gvswf556fy24 , 23-Май-16 00:37 
>пока не придумали специального синтаксиса для задания правил с генерацией нескольких целей одним правилом
>a1.c b1.c c1.c: x.x

специальный синтаксис там сейчас сделан


"Выпуск системы сборки GNU Make 4.2"
Отправлено анон2 , 23-Май-16 10:21 
>>пока не придумали специального синтаксиса для задания правил с генерацией нескольких целей одним правилом
>>a1.c b1.c c1.c: x.x
> специальный синтаксис там сейчас сделан

Пример?
Только без pattern-rules - они очень мешают при нерекурсивной системе сборки.


"Выпуск системы сборки GNU Make 4.2"
Отправлено lklhllchsjkgcdjgfyusgf6 , 23-Май-16 11:29 
Использование такой конструкции не для генерации нескольких целей - это и есть специальный синтаксис.

"Выпуск системы сборки GNU Make 4.2"
Отправлено yaa , 23-Май-16 13:02 
Ну, видимо вопрос был про следующий случай.

gen создает _два_ файла, a и b.

c: a b
   process a b > c

# плохо: если нет ни a ни b,
# gen x вызовется два раза, а при параллельном make
# может быть совсем нехорошо

a b:  x
   gen x

Способа указать "выполнить gen x один раз, если или a или b старше x или не существует" сейчас нет.


"Выпуск системы сборки GNU Make 4.2"
Отправлено iinmlukkgyjvvv , 23-Май-16 13:16 
>a b:  x

Сейчас это считается двумя независимыми правилами вместо одного. Что курил автор GNU Make?


"Выпуск системы сборки GNU Make 4.2"
Отправлено yaa , 23-Май-16 15:27 
a b: x
  rule

эквивалентно

a: x
  rule

b: x
  rule

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


"Выпуск системы сборки GNU Make 4.2"
Отправлено fcjbjvcdvuyctrvuyv , 23-Май-16 23:18 
>все вполне логично

facepalm

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

Кстати, две похожие проблемы с большинством учебников по виму (говорю как вимер):

1. куча команд типа "удалить от курсора до предпоследнего слова предпоследнего предложения предпоследнего абзаца", и потом полторы строчки типа "поклонники notepad могут выделять любые блоки движением курсора"

2. "забудьте про стрелочки, наша секта должна страдать"


"Выпуск системы сборки GNU Make 4.2"
Отправлено анон2 , 23-Май-16 17:44 
>[оверквотинг удален]
> gen создает _два_ файла, a и b.
> c: a b
>    process a b > c
> # плохо: если нет ни a ни b,
> # gen x вызовется два раза, а при параллельном make
> # может быть совсем нехорошо
> a b:  x
>    gen x
> Способа указать "выполнить gen x один раз, если или a или b
> старше x или не существует" сейчас нет.

_Красивого_ способа указать нет.

Некрасивый - с использованием переменной-отсечки.
Работает, правда, через eval, но работает же.
И с jobserver'ом - при запуске make -j


"Выпуск системы сборки GNU Make 4.2"
Отправлено nc , 22-Май-16 22:59 
Когда уже все перейдут на что-нибудь типа QBS и похоронят эту архаичную хрень?

"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 22-Май-16 23:40 
Когда вы перепишете linux, gcc, binutils и glibc на Qt.

"Выпуск системы сборки GNU Make 4.2"
Отправлено Вареник , 23-Май-16 00:41 
Что стартовало в начале 90-х и раньше - так и использует инструментарий-современник.

Что стартует сейчас - по возможности использует что-то современное.


"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 23-Май-16 18:16 
Например GNU Make 4.2

"Выпуск системы сборки GNU Make 4.2"
Отправлено nc , 22-Май-16 23:59 
Qt тут не при чем (разве что QBS разрабатывает та же организация что и Qt). Речь идет о том, что make - древний архаизм с кучей недостатков и костылей, почитать о которых можно например https://habrahabr.ru/post/138682
И вряд ли переход должен делать я:) Это задача сообщества в целом, и лидеров в особенности - понять что инструмент родом из 70-х годов объективно устарел, принять принципиальное решение о необходимости перехода, проанализировать альтернативы, выбрать, разработать поэтапный план и начать его выполнять.

"Выпуск системы сборки GNU Make 4.2"
Отправлено cmp , 23-Май-16 00:25 
Да как вы задолбали юнные революционеры, сделайте хороший инструмент вам спасибо скажут, а не х..ню на перле как вы любите.

"Выпуск системы сборки GNU Make 4.2"
Отправлено angra , 23-Май-16 05:46 
> юнные революционеры
> на перле

А не отстал ли ты от жизни?



"Выпуск системы сборки GNU Make 4.2"
Отправлено cmp , 24-Май-16 10:34 
А не зажрались ли вы по 1Гб памяти тратить на юмы?

"Выпуск системы сборки GNU Make 4.2"
Отправлено anon2 , 23-Май-16 00:55 
> Речь идет о том, что make - древний
> архаизм с кучей недостатков и костылей, почитать о которых можно например
> https://habrahabr.ru/post/138682

большинство претензий в статье преувеличено, раздуто, а некоторые не соотвествуют действительности.

> понять что инструмент родом из 70-х годов объективно устарел, принять принципиальное решение о необходимости перехода, проанализировать альтернативы, выбрать, разработать поэтапный план и начать его выполнять.

займитесь. Ведь некоторых, например меня, вполне устраивает архаичный GNU make.


"Выпуск системы сборки GNU Make 4.2"
Отправлено dq0s4y71 , 23-Май-16 13:16 
Ну да, круглое колесо - это древний архаизм. Нужно сделать квадратное.

"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 23-Май-16 13:45 
> Ну да, круглое колесо - это древний архаизм. Нужно сделать квадратное.

Нет, но уже изобрели паровую машину, которая по рельсам может тянуть груз сотен телег.
Хотя некоторым и привычней по старинке, лошадками (а то и ножками), постоянно трын^W твердя, что раз по этим буеракам шайтан-машина не пройдет, то значит вообще не нужна!

А еще куча людей возится с крылом, кто-то собирает дирижоп^W дирижаблю (а особо одаренные с ничего-прыжками и транпурти... транспори... ничего-траспартировкой – тьфу, язык сломишь) хотя все знают, что если бы Главный Архитектор Этой Симуляции хотел, чтобы мы летали, то подарил бы нам крылья вместо колеса!


"Выпуск системы сборки GNU Make 4.2"
Отправлено Michael Shigorin , 23-Май-16 14:55 
> то подарил бы нам крылья вместо колеса!

Так иному дай крылья -- он их всё равно расшибёт... об осину.


"Выпуск системы сборки GNU Make 4.2"
Отправлено fcjbjvcdvuyctrvuyv , 23-Май-16 23:19 
круглое колесо запатентовали

"Выпуск системы сборки GNU Make 4.2"
Отправлено Владимир , 23-Май-16 13:28 
Я был активным сторонником QBS, писал про него на хабре, активно юзал и репортил баги.
Но на сегодняшний день я в нем разочарован и перешел на CMake.

Минусы: очень медленная разработка - до сих пор не вмерджили мои патчи по генерации проектов для студии (хотя замечаний, что исправить там нет.)
нет удобного configure для зависимостей (да, запилили пробки, но попробуйте их юзать вместе с Depends)
-слабая поддержка других IDE кроме QtC (отчасти затык в генераторах)
-адски медленные инкрементные билды, если начинаешь хоть сколько-то юзать wildcards - с cmake такой проблемы нет.

Единственный его крупный плюс- достаточно легкий лаконичный синтаксис.


"Выпуск системы сборки GNU Make 4.2"
Отправлено Michael Shigorin , 23-Май-16 14:53 
> И вряд ли переход должен делать я:) Это задача сообщества в целом

А кто Вы, извините, такой, чтоб ставить сообществу задачи?

Мне вот надо -- я себе в уголочке и пилю на gnu make, с другими делюсь.

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


"Выпуск системы сборки GNU Make 4.2"
Отправлено ananim , 23-Май-16 13:22 
и утро начинаем с прекомпиляции всех прог -

"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 23-Май-16 15:06 
что-то я не понял про SHELLSTATUS они хотят сказать что раньше make на проверял статус завершения программ которые он запускает?

"Выпуск системы сборки GNU Make 4.2"
Отправлено анон2 , 23-Май-16 18:03 
> что-то я не понял про SHELLSTATUS они хотят сказать что раньше make
> на проверял статус завершения программ которые он запускает?

речь идёт о встроенной, (редко используемой)) функции $(shell) - выполнения команды и записи результата в переменную.

a := $(shell ls)

Да, раньше статус возврата ls в make узнать было нельзя.

$(shell) используется для чтения stdout - если значение $a пустое, значит ls завершился с ошибкой.


"Выпуск системы сборки GNU Make 4.2"
Отправлено Андрей , 24-Май-16 00:26 
> речь идёт о встроенной, (редко используемой))

Как это редко используемой?

CFLAGS+=`pkg-config gtk+-2.0 --cflags`
или
CFLAGS+=$(shell pkg-config gtk+-2.0 --cflags)

Можно глянуть в vlc: contrib/src/main.mak


"Выпуск системы сборки GNU Make 4.2"
Отправлено анон2 , 24-Май-16 10:25 
По-хорошему pkg-config должен вызывать configure, а не make.
Редко используемой - потому что в Makefile вызывать $(shell) долго и дорого. Потом удивляются, почему сборка тормозит.

"Выпуск системы сборки GNU Make 4.2"
Отправлено Андрей , 24-Май-16 11:25 
Звучит логично. Надо будет обращать внимание.

"Выпуск системы сборки GNU Make 4.2"
Отправлено Аноним , 24-Май-16 13:44 
проверил, к счастью код возврата выполняемой программы проверяется и все тормозиться если какой нибудь gcc вернул не 0

"Выпуск системы сборки GNU Make 4.2"
Отправлено Michael Shigorin , 23-Май-16 15:09 
Раз уж в тредике собрались и специалисты, а не только махатели чужой шашкой -- вдруг кому-то пригодится полезная подборка маленьких хитростей по gmake: http://www.cmcrossroads.com/ask-mr-make

"Выпуск системы сборки GNU Make 4.2"
Отправлено zhenya_k , 25-Май-16 10:35 
Пробелы в именах файлов и директорий когда будут восприниматься в make?

"Выпуск системы сборки GNU Make 4.2"
Отправлено anon2 , 26-Май-16 00:46 
А что, сейчас игнорируются?))
Пробелы в путях к файлам в правилах нужно эскейпить, что, правда, вручную делать жутко не удобно.
Хорошо, что редко когда это нужно - всегда можно проект расположить в директории без пробелов в путях (на виндах можно сделать отображение директории на диск через subst), а пути к системным хедерам, пожалуй, встречаются только в опциях компилятора и автогенеренных dep-файлах зависимостей.
Если посмотреть на другие системы сборки, на то, как в них сделана обработка строк - например в cook от https://en.m.wikipedia.org/wiki/Peter_Miller_(software_engineer) - то в Gnu make сценарии сборки получаются "чище", легче читаются, чем в cook, именно из-за отсутствия необходимости эскейпить кавычки где-нибудь в регулярном выражении для вызываемого sed.

"Выпуск системы сборки GNU Make 4.2"
Отправлено yaa , 26-Май-16 09:39 
>     Если посмотреть на другие системы сборки, на то, как в них сделана обработка строк - например в cook от https://en.m.wikipedia.org/wiki/Peter_Miller_(software_engineer) - то в Gnu make сценарии сборки получаются "чище", легче читаются, чем в cook, именно из-за отсутствия необходимости эскейпить кавычки где-нибудь в регулярном выражении для вызываемого sed.

Зато регулярные выражения с $ внутри make --- $$$$ ;)