Makefile не создает несколько TXT-файлов с помощью сенсорного - PullRequest
1 голос
/ 28 марта 2020

Я новичок в make-файлах и пытаюсь создать несколько файлов одновременно, используя make-файл, содержащий touch file-{1..10}.txt. Это не работает должным образом, так как создает файл с именем file-{1..10}.txt вместо создания файлов с file-1.txt по file-10.txt.

Это код make-файла:

   .DEFAULT_GOAL := generate

say_hello:
    @echo "Hello World"

generate:
    @echo "Creating empty text files..."
    touch file-{1..10}.txt

clean:
    @echo "Cleaning up..."
    rm *.txt

При вводе make в терминал он печатает

Creating empty text files...
touch file-{1..10}.txt

и создает файл file-{1..10}.txt .
Ввод touch file-{1..10}.txt в терминал создает file-1.txt - file-10.txt как обычно.

1 Ответ

1 голос
/ 28 марта 2020

Стандарт POSIX требует, чтобы make всегда вызывал оболочку /bin/sh. Он никогда не вызовет предпочитаемую пользователем оболочку (подумайте, какая катастрофа непереносимости , которой будет !)

Расширение скобки, которое вы хотите, не является частью определения POSIX sh. Это дополнительная функция, предоставляемая bash и некоторыми другими оболочками. В системах, где /bin/sh - это ссылка на bash, таких как системы на базе MacOS и Red Hat, расширение скобок будет работать в make-файлах.

В системах, где /bin/sh - это ссылка на POSIX- совместимая оболочка, такая как dash, такая как Ubuntu, попытка использовать функции не-POSIX в ваших рецептах make-файла не будет работать.

Вы можете либо написать операцию касания, либо добавить:

SHELL := /bin/bash

в ваш make-файл, чтобы заставить make вызвать bash. Просто помните, что ваш make-файл больше не переносится на системы, в которых не установлено /bin/bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...