LINUX.ORG.RU

GNU make 3.82

 ,


0

0

Через 4 года от последнего релиза обновилась утилита make, управляющая сборкой и компоновкой обьектных, бинарных объектов, а также созданием другого рода файлов при сборке программных проектов.

Обновление носит значимый характер и включает некоторые несовместимые с предыдущими версиями изменения.

  • анонсировано удаление функций сортировки по маске, рекомендуется пользоваться $(sort ...)
  • ввиду изменения в 2008 году стандарта POSIX , теперь требуется вызывать шелл с ключом -e , подобное может быть несовместимо с многими имеющимися makefile's и пока потребует указания переменных .POSIX или .SHELLFLAGS
  • переменная $? теперь содержит все предзависимости (даже те которых пока не существует), ранее переменная содержала только существующие цели.
  • расширены директивы парсера, анонсированы три возможные несовместимости: 1) предзависимость содержащая = больше не может заканчиваться обратным слешем, нужно создавать переменную с = и использовать ее в правилах для цели. 2) в именах переменных более недопустимы пробелы. 3) прямые цели (explicit target) и цели по шаблону (pattern target) теперь не могут сосуществовать в одном правиле сборки
  • правила для переменных и правил шаблонов теперь будут применяться по наиболее короткому пути, а не в порядке их определения. Определяется ключем shortest-stem в переменной .FEATURES
  • поиск библиотек теперь производиться также как его делает компоновщик (ранее для -lfoo просматривались libfoo.so в текущем каталоге, путях vpath и системных каталогах, потом производился поиск статической библиотеки по этим же путям, теперь один и тот же путь будет проверяться сначала на libfoo.so, а потом на libfoo.a)

из других изменений:

  • новый ключ командной строки --eval=STRING, идентичен директиве $(eval ...), будет обработан после определения правил и переменных по умолчанию, но перед обработкой любых makefile
  • новая специальная переменная .RECIPEPREFIX позволяет переопределить начало рецепта (recipe introduction) с табуляции (tab) на что-то другое
  • новая специальная переменная .SHELLFLAGS позволяет управлять вызовами шелла, по умолчанию это будет ключ -с или -ec, если установлена переменная .POSIX
  • новая специальная цель .ONESHELL укажет make вызвать шелл и вызвать команду сборки всего рецепта (recipe) вне зависимости от числа строк в нем. Для совместимости с POSIX шеллами контрольные символы «@», «+» и "-" будут отфильтрованы.
  • модификатор переменных private запретит наследование этой переменной в предзависимостях
  • директива undefine (для удаления переменной)
  • обработчик теперь будет воспринимать множественные модификаторы export, override, private на одной строке и в любом порядке, также можно создавать цели и переменные с такими именами
  • директива define теперь разрешает использовать оператор назначения переменной, что особенно облегчает работу с многострочными переменными
  • Исправлены многочисленные ошибки

>>> анонс на savannah.gnu.org

★★★★★

Проверено: svu ()

Ответ на: комментарий от Sylvia

надеюсь, совместимость со «стандартным» (не-GNU) make не нарушена?

annulen ★★★★★ ()

>GNU make 3.8.2

Блин, вот только 3.8.1 закончил собирать. :(

anonymous ()

Спасибо за подробный обзор.

По сабжу: очередной кусок bloatware. Ненависть кипит словно гудрон.

Manhunt ★★★★★ ()
Ответ на: комментарий от Manhunt

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

Sylvia ★★★★★ ()

Опять все поломали.

sid350 ★★★★★ ()

Обновление носит значимый характер и включает некоторые несовместимые с предыдущими версиями изменения.

И это при том, что изменилась только минорная часть версии.

alexru ★★★★ ()
Ответ на: комментарий от Sylvia

>причем несовместимых с предыдущими версиями
А зачем им совместимость с предыдущими версиями?
Ведь это же GNU.
А GNUшным религиозным красноглазерам все равно на совместимость,
в том числе и с классическим make

c-xp ()

с 2004 года сижу на scons и решительно не понимаю, кому в наше время нужен мэйк.

anonymous ()

Вот поэтому я использую только BSD make. gmake ужасен.

slovazap ★★★★★ ()
Ответ на: комментарий от c-xp

> А GNUшным религиозным красноглазерам все равно на совместимость, в том числе и с классическим make

потому путь им в глубокую задницу. еще на 8 лет. как минимум

anonymous ()
Ответ на: комментарий от anonymous

Make в наше время нужен over 9000 программам, собираемым из исходников. За последние лет 10 - GNU Make стал стандартом де-факто в Линуксе. И выпускать минорный релиз с ТАКИМИ несовместимостями, это по меньшей мере свинство.

anonymous ()
Ответ на: комментарий от anonymous

>Make в наше время нужен over 9000 программам, собираемым из исходников. За последние лет 10 - GNU Make стал стандартом де-факто в Линуксе. И выпускать минорный релиз с ТАКИМИ несовместимостями, это по меньшей мере свинство

Это действительно мину подложили таким дистрам как Gentoo.

bind2cppman ()
Ответ на: комментарий от anonymous

Эти 9000 использовали мейк «в лоб»? Не верю.

sv75 ★★★★★ ()
Ответ на: комментарий от alexru

в том то и подлость, что вышло 4 недели назад, ну вышло и вышло... версия «минорная»... а вот если список изменений посмотреть ....

Sylvia ★★★★★ ()
Ответ на: комментарий от sv75

> Эти 9000 использовали мейк «в лоб»? Не верю.

Да почти никто его «в лоб» не использовал, полпроцента всего софта от силы. Просто анонимусам надо поплакать же.

cruxish ★★★★ ()
Ответ на: комментарий от sv75

Наверняка есть и такие, которые «в лоб». А как насчет старых скриптов configure ? Будут-ли они генерировать makefile'ы совместимые с новым make'ом ? К тому-же скрипты configure часто бывают и нестандартные, которые не перебилдишь через autoreconf.

anonymous ()

Минорная версия и несовместимые изменения??? Надеюсь голова у них не только для того чтобы есть и я не замечу что куча программ перестала собираться...

I-Love-Microsoft ★★★★★ ()

Чтобы мониторить выход новых версий таких утилит, компиляторов и т.п. нужно каждый день на их сайты заходить или есть место где это всё вместе собрано?

bind2cppman ()
Ответ на: комментарий от slovazap

gmake ужасен.

Плюсую. бсд-шный make лучше. Хотя мне scons больше нравится для сборки.

true_admin ★★★★★ ()

> …требуется вызывать шелл с ключем -e
> ключем

У меня, кажется, тоже слёзы наворачиваются…

anonymous ()

Давно назрело, молодцы.

alx_me ★★☆ ()
Ответ на: комментарий от anonymous

>с 2004 года сижу на scons и решительно не понимаю, кому в наше время нужен мэйк.

дерьмо мутное этот ваш скунс - стоит немного отойти от заложенных внутри шаблонов - и сборка превращается в бубновую пляску. make рулит.

anonymous ()

>поиск библиотек теперь производиться также как он его делает компоновщик
это на каком языке? просто набор слов.

Firecracker ()

Нафига было вообще шевелить эту окаменелость? 8 лет лежало и не воняло.

thesis ★★★★★ ()
Ответ на: комментарий от anonymous

> с 2004 года сижу на scons и решительно не понимаю, кому в наше время нужен мэйк.

scons написан на Python'е, который собирается с помощью make, который собирается с помощью gcc, для сборки которого опять-таки нужен make.

shimon ★★★★★ ()

Сидели 8 лет на 3.81 и ещё столько же посидим. Чего все перевозбудились так? Или кого-то премии лишат, если он на 3.82 сегодня же не обновится?

Lumi ★★★★★ ()

Привет Сильви! Sylvia, пожалуйста (волшебное слово, дада), переименуйся обратно в Silvy. Если хочешь, я голосую за это. В этом много истории, настальгии и романтики. Как бэйбика назвала?

atommixz ()

Почему в этом топике прозвучало scons но не прозвучало cmake? который является великолепной кросс-платформенной метасистемой сборки, попробуйте своим сконсом сгенерируйте проекты для Visual Studio

anonymous ()
Ответ на: комментарий от anonymous

>Make в наше время нужен over 9000 программам, собираемым из исходников. За последние лет 10 - GNU Make стал стандартом де-факто в Линуксе.

не путай make и расширения GNU, которые используются далеко не везде

annulen ★★★★★ ()
Ответ на: комментарий от anonymous

cmake генерит мейкфайлы не используюшие GNU-расширений (хотя они в свете фэйла с ОпенОфисом планируют добавить GNU make в качестве отдельного бэкенда)

annulen ★★★★★ ()
Ответ на: комментарий от annulen

> хотя они в свете фэйла с ОпенОфисом

Что за фейл? Реквестирую линк на подробности.

Manhunt ★★★★★ ()
Ответ на: комментарий от anonymous

…требуется вызывать шелл с ключем -e

ключем

У меня, кажется, тоже слёзы разворачиваются
fixed.

darkshvein ☆☆ ()

> поиск библиотек теперь производиться также как он его делает компоновщик

Ужас-ужас. Что-то тут явно не так. Парсер сбивается.

anonymous ()
Ответ на: комментарий от Manhunt

ищите в мэйлинг-листе dev@openoffice.org. я следил за событиями из почтового ящика :)

Краткое описание: OOo переходит на новую систему сборки. Выбор был между CMake и GNU make + набор макросов на нем. Пришли к выводу, что для CMake тоже придется написать кучу макросов, у CMake отсутствует возможность нерекурсивной сборки и автоматического регистрирования взаимозависимостей модулей (не файлов друг от друга!), да еще у него оверхед больше (мейкфайлов много создает). В итоге решили на GNU make делать, а Билл Хоффман (шеф Kitware) сказал, что возможно они сделают для отдельный бэкэнд для GNU make, основанный на макросах ребят из ООо

annulen ★★★★★ ()

Он по прежнему очень строго относится к разделителям?

Жутко бесило когда редактор заменял при сохранении табы на пробелы и из-за этого gmake не парсил Makefile.

rudchenkos ()
Ответ на: комментарий от rudchenkos

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

Sylvia ★★★★★ ()
Ответ на: комментарий от Manhunt

если интересно, здесь некоторые выводы без срача

wiki.services.openoffice.org/wiki/Category:Build_Environment_Effort

annulen ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.