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 ()
Последнее исправление: hibou (всего исправлений: 2)
Ответ на: комментарий от annulen

В gnu make как раз это делается нетривиально, особенно если надо из одних исходников собрать разное с помощью разных ключей. Помню как трахался в свое время, пока не открыл для себя cmake.

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

>«ничего не делая руками»?

я бы сказал, что это не только в CMake, но и в GNU make сделать не так сложно

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

кстати, в гну мэйке руками --- задолбаетесь отслеживать зависимости или проклянёте все «лишних» проходах пересборки.

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

>Помню как трахался в свое время, пока не открыл для себя cmake.

теперь попробуйте радобраться со сконсом и забыть о «холостых» прогонах cmake при разработке.

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

Они возникают только при правке cmakelists.txt, что меня не парит, а вот возвращаться назад к ручной правке vcproj/sln я не хочу.

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

Хорошо, как мне открыть проект в студии. vcproj нет, есть только sconstruct и сотня *.cpp файлов в разных директориях. Последовательность действий?

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