The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск системы сборки GNU Make 4.2

22.05.2016 20:25

После полутора лет разработки представлен релиз системы сборки GNU Make 4.2. Кроме исправления ошибок, в новой версии можно отметить следующие улучшения:

  • Добавлена новая переменная $(.SHELLSTATUS), в которой передаётся статус возврата последней функции "!= " или $(shell ...), вызванной из текущего экземпляра make. Ноль означает успешное выполнение, а иное другое значение - не успешное;
  • Функция $(file ...) теперь может читать из файла и при указании $(file <FILE) распространяется на содержимое файла;
  • Показываемые номера строк make-файлов теперь явно определяют строку, с которой связана проблема или предупреждение.
  • Стабилизирован и документирован интерфейс "jobserver". Нарушена обратная совместимость: внутренняя опция командной строки "--jobserver-fds" в итоговой спецификации опубликована как "--jobserver-auth";
  • Уровень распараллеливания сборки может быть определён через MAKEFLAGS, даже при включенном jobserver (ранее MAKEFLAGS не принимался во внимание при включении jobserver).


  1. Главная ссылка к новости (http://lists.gnu.org/archive/h...)
  2. OpenNews: Выпуск системы сборки CMake 3.5
  3. OpenNews: Выпуск генератора файлов сборки GNU Automake 1.15
  4. OpenNews: Выпуск системы сборки GNU Make 4.1
  5. OpenNews: Релиз GNU Make 4.0 с поддержкой расширений на языке GNU Guile
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/44475-make
Ключевые слова: make
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (50) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, kachsheev (ok), 20:42, 22/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Годно!
     
     
  • 2.3, Анончег (?), 22:18, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Юный падаван имел в виду вот это?

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

     
     
  • 3.4, Аноним (-), 22:30, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    очевидно, юный падаван имел ввиду саму утилиту.
    а номер строки make-файла - штука специфичная - у тов.Анонима, который я, за 13 лет разработки под никсы ни разу такой потребности не возникало.
     
     
  • 4.5, Анончег (?), 22:52, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > я, за 13 лет разработки под никсы ни разу такой потребности не возникало.

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

     
     
  • 5.12, Аноним (-), 23:42, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > Получается ребята напрасно старались раз тебе это не нужно?

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

     
  • 3.9, kachsheev (ok), 23:38, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Юный падаван имел в виду развие проекта в целом.
    Пока для себя лучшей сисемы сборки не вижу, да и всё равно стандарт в никсах де-факто.
     
     
  • 4.14, Анончег (?), 00:13, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Юный падаван имел в виду развие проекта в целом.
    > Пока для себя лучшей сисемы сборки не вижу, да и всё равно
    > стандарт в никсах де-факто.

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

     
     
  • 5.44, e (??), 09:19, 24/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что такое подаван ?
    Чем юный п. отличается от пожилого п. ?
     
     
  • 6.49, Какаянахренразница (ok), 09:23, 25/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Что такое подаван ?

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

     

  • 1.2, Аноним (-), 21:08, 22/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    В каком веке будет корректная обработка правил с генерацией нескольких файлов?
     
     
  • 2.6, Кармер (?), 22:54, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Тов Анонимус любит Fortran ??
     
     
  • 3.7, Анончег (?), 22:58, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +9 +/
    > Тов Анонимус любит Fortran ??

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

     
  • 3.10, Аноним (-), 23:39, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет, литературное программирование.

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

     
  • 3.22, kravich (ok), 06:23, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Скорее, Protocol Buffers. Там из одного .proto генерируются одновременно .cc и .h.
     
     
  • 4.24, dbfbmvdy7uet (?), 11:27, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ЕМНИП в lex и yacc аналогично.
     
  • 2.15, anon2 (?), 00:21, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > В каком веке будет корректная обработка правил с генерацией нескольких файлов?

    пока не придумали специального синтаксиса для задания правил с генерацией нескольких целей одним правилом, но можно использовать уже имеющиеся возможности, например так (на примере работающего 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

     
     
  • 3.17, gvswf556fy24 (?), 00:37, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >пока не придумали специального синтаксиса для задания правил с генерацией нескольких целей одним правилом
    >a1.c b1.c c1.c: x.x

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

     
     
  • 4.23, анон2 (?), 10:21, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >>пока не придумали специального синтаксиса для задания правил с генерацией нескольких целей одним правилом
    >>a1.c b1.c c1.c: x.x
    > специальный синтаксис там сейчас сделан

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

     
     
  • 5.25, lklhllchsjkgcdjgfyusgf6 (?), 11:29, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Использование такой конструкции не для генерации нескольких целей - это и есть специальный синтаксис.
     
     
  • 6.27, yaa (?), 13:02, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, видимо вопрос был про следующий случай.

    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 или не существует" сейчас нет.

     
     
  • 7.29, iinmlukkgyjvvv (?), 13:16, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >a b:  x

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

     
     
  • 8.37, yaa (?), 15:27, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    a b x rule эквивалентно a x rule b x rule и все вполне логично Проблем... текст свёрнут, показать
     
     
  • 9.41, fcjbjvcdvuyctrvuyv (?), 23:18, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    facepalm Без неявных правил можно выжить, а без явных правил совсем никак Необх... текст свёрнут, показать
     
  • 7.38, анон2 (?), 17:44, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > 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

     

  • 1.8, nc (ok), 22:59, 22/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Когда уже все перейдут на что-нибудь типа QBS и похоронят эту архаичную хрень?
     
     
  • 2.11, Аноним (-), 23:40, 22/05/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Когда вы перепишете linux, gcc, binutils и glibc на Qt.
     
     
  • 3.19, Вареник (?), 00:41, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что стартовало в начале 90-х и раньше - так и использует инструментарий-современник.

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

     
     
  • 4.40, Аноним (-), 18:16, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Например GNU Make 4.2
     

  • 1.13, nc (ok), 23:59, 22/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Qt тут не при чем (разве что QBS разрабатывает та же организация что и Qt). Речь идет о том, что make - древний архаизм с кучей недостатков и костылей, почитать о которых можно например https://habrahabr.ru/post/138682
    И вряд ли переход должен делать я:) Это задача сообщества в целом, и лидеров в особенности - понять что инструмент родом из 70-х годов объективно устарел, принять принципиальное решение о необходимости перехода, проанализировать альтернативы, выбрать, разработать поэтапный план и начать его выполнять.
     
     
  • 2.16, cmp (ok), 00:25, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да как вы задолбали юнные революционеры, сделайте хороший инструмент вам спасибо скажут, а не х..ню на перле как вы любите.
     
     
  • 3.21, angra (ok), 05:46, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > юнные революционеры
    > на перле

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


     
     
  • 4.46, cmp (ok), 10:34, 24/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А не зажрались ли вы по 1Гб памяти тратить на юмы?
     
  • 2.20, anon2 (?), 00:55, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Речь идет о том, что make - древний
    > архаизм с кучей недостатков и костылей, почитать о которых можно например
    > https://habrahabr.ru/post/138682

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

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

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

     
  • 2.28, dq0s4y71 (??), 13:16, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Ну да, круглое колесо - это древний архаизм. Нужно сделать квадратное.
     
     
  • 3.32, Аноним (-), 13:45, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну да, круглое колесо - это древний архаизм. Нужно сделать квадратное.

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

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

     
     
  • 4.34, Michael Shigorin (ok), 14:55, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > то подарил бы нам крылья вместо колеса!

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

     
  • 3.42, fcjbjvcdvuyctrvuyv (?), 23:19, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    круглое колесо запатентовали
     
  • 2.31, Владимир (??), 13:28, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я был активным сторонником QBS, писал про него на хабре, активно юзал и репортил баги.
    Но на сегодняшний день я в нем разочарован и перешел на CMake.

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

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

     
  • 2.33, Michael Shigorin (ok), 14:53, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > И вряд ли переход должен делать я:) Это задача сообщества в целом

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

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

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

     

  • 1.30, ananim (?), 13:22, 23/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    и утро начинаем с прекомпиляции всех прог -
     
  • 1.35, Аноним (-), 15:06, 23/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    что-то я не понял про SHELLSTATUS они хотят сказать что раньше make на проверял статус завершения программ которые он запускает?
     
     
  • 2.39, анон2 (?), 18:03, 23/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > что-то я не понял про SHELLSTATUS они хотят сказать что раньше make
    > на проверял статус завершения программ которые он запускает?

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

    a := $(shell ls)

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

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

     
     
  • 3.43, Андрей (??), 00:26, 24/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > речь идёт о встроенной, (редко используемой))

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

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

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

     
     
  • 4.45, анон2 (?), 10:25, 24/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    По-хорошему pkg-config должен вызывать configure, а не make.
    Редко используемой - потому что в Makefile вызывать $(shell) долго и дорого. Потом удивляются, почему сборка тормозит.
     
     
  • 5.47, Андрей (??), 11:25, 24/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Звучит логично. Надо будет обращать внимание.
     
  • 2.48, Аноним (-), 13:44, 24/05/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    проверил, к счастью код возврата выполняемой программы проверяется и все тормозиться если какой нибудь gcc вернул не 0
     

  • 1.36, Michael Shigorin (ok), 15:09, 23/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Раз уж в тредике собрались и специалисты, а не только махатели чужой шашкой -- вдруг кому-то пригодится полезная подборка маленьких хитростей по gmake: http://www.cmcrossroads.com/ask-mr-make
     
  • 1.50, zhenya_k (?), 10:35, 25/05/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Пробелы в именах файлов и директорий когда будут восприниматься в make?
     
     
  • 2.51, anon2 (?), 00:46, 26/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А что, сейчас игнорируются?))
    Пробелы в путях к файлам в правилах нужно эскейпить, что, правда, вручную делать жутко не удобно.
    Хорошо, что редко когда это нужно - всегда можно проект расположить в директории без пробелов в путях (на виндах можно сделать отображение директории на диск через subst), а пути к системным хедерам, пожалуй, встречаются только в опциях компилятора и автогенеренных dep-файлах зависимостей.
    Если посмотреть на другие системы сборки, на то, как в них сделана обработка строк - например в cook от https://en.m.wikipedia.org/wiki/Peter_Miller_(software_engineer) - то в Gnu make сценарии сборки получаются "чище", легче читаются, чем в cook, именно из-за отсутствия необходимости эскейпить кавычки где-нибудь в регулярном выражении для вызываемого sed.
     
     
  • 3.52, yaa (?), 09:39, 26/05/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >     Если посмотреть на другие системы сборки, на то, как в них сделана обработка строк - например в cook от https://en.m.wikipedia.org/wiki/Peter_Miller_(software_engineer) - то в Gnu make сценарии сборки получаются "чище", легче читаются, чем в cook, именно из-за отсутствия необходимости эскейпить кавычки где-нибудь в регулярном выражении для вызываемого sed.

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

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру