Makefile и файл rm -f. {Ext1, ext2, ext3} проблема - PullRequest
1 голос
/ 16 июня 2010

Не могли бы вы объяснить, почему правило Makefile:

clean:
    rm -f foo.{bar1,bar2,bar3}

не приводит к удалению файлов: foo.bar1, foo.bar2 и foo.bar3? Я полагаю, что я видел подобный шаблон много раз в различных файлах Makefile, но сейчас я пишу свой собственный файл Makefile и не могу заставить это правило работать правильно (файлы не удаляются).

Я использую:

  • GNU Make 3,81
  • GNU Bash 4.1.5

Баш пытается избежать этого, как я подозреваю:

$ echo test.{a,b,c}
test.a test.b test.c

Спасибо!

UPDATE

Благодаря подсказке Дэвида я нашел решение для проблемы, описанной выше. Gnu make по умолчанию использует / bin / sh, поэтому a. {1,2,3} не оценивается как a.1 a.2 a.3.

Чтобы заставить 'make' использовать bash вместо sh, добавьте следующую строку в ваш Makefile:

SHELL=/bin/bash

отныне a. {1,2,3} будет считаться a.1 a.2 a.3

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Есть ли файл с именем clean в каталоге?Если это так, make будет считать эту цель актуальной и не будет запускать соответствующую команду.Чтобы это исправить, добавьте эту строку в ваш make-файл:

.PHONY: clean

Если при запуске make clean вы получите вывод

make: `clean' is up to date.

, то это, вероятно, ваша проблема.

0 голосов
/ 16 июня 2010

Дело в том, что оболочка здесь не вызывается, а напрямую rm.Поскольку оболочка выполняет подстановку {}, rm «видит» строку «foo. {Bar1, bar2, bar3}».Поскольку такого файла нет, ничего не происходит.

Вы должны использовать один из строковых макросов GNUmake, чтобы он выполнил расширение за вас.

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