Для цикла в make-файле не работает - PullRequest
0 голосов
/ 03 мая 2018

В моем make-файле у меня есть:

all:
  for i in {20..50000..10} ; do \
    echo "Computing $$i" ;\
  done

Которые должны печатать числа 20, 30, 40, ..., 50000 каждый в отдельной строке.

Это работает в старой стабильной версии Debian (GNU Make 4.0, GNU Bash 4.3), но не в стабильной Debian (GNU Make 4.1 и GNU Bash 4.4.12).

Стабильный выпуск Debian печатает только строку "{20..50000..10}". Почему это? Что такое переносимый способ написать это для цикла в make-файле?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Stick с POSIX-совместимой петлей:

all:
  i=20; while [ "$$i" -le 50000 ]; do \
    echo "Computing $$i"; i=$$((i + 10));\
  done
0 голосов
/ 03 мая 2018

Если вы запустите это в командной строке:

/bin/sh -c 'for i in {20..5000..10}; do echo $i; done'

вы увидите, что это не работает так, как вы надеялись. Make всегда вызывает /bin/sh (который должен быть оболочкой POSIX) для запуска рецептов: это было бы катастрофой для переносимости, если бы он использовал любую оболочку, которую использовал пользователь, вызывающий make-файл.

Если вы действительно хотите написать свои рецепты make-файла в синтаксисе bash, то вам нужно явно указать это, добавив:

SHELL := /bin/bash

в ваш make-файл.

...