Назад | Перейти на главную страницу

Расширение шаблона оболочки makefile: как это сделать?

Нашел интересную "особенность" make

DIR_INPUT=/test
test:
        # testing date (it should be yesterday)
        test ! -z "${DATE}"
        ls -lad ${DIR_INPUT}/{a,c}

но вроде как-то странно работает:

PROMPT# make test
# testing date (it should be yesterday)
test ! -z "20100120"
ls -lad /test/{a,c}
/test/{a,c}: No such file or directory
*** Error code 2
make: Fatal error: Command failed for target `test'
PROMPT#

конечно, если я выдам ls -lad / test / {a, c} из моей оболочки работает.

Вопрос: как сделать так, чтобы программа make оценивала этот шаблон, как это сделала бы оболочка?

Вы можете сделать это с помощью функции оболочки, $ (shell touch {a..c}), (может быть, и функцию подстановочного знака?):

kbrandt@kbrandt-opadmin:~/scrap/make$ ls
foo
kbrandt@kbrandt-opadmin:~/scrap/make$ vim foo
kbrandt@kbrandt-opadmin:~/scrap/make$ ls
foo
kbrandt@kbrandt-opadmin:~/scrap/make$ cat foo
files:
    $(shell touch {a..c})
kbrandt@kbrandt-opadmin:~/scrap/make$ make -f foo
make: `files' is up to date.
kbrandt@kbrandt-opadmin:~/scrap/make$ ls
a  b  c  foo
kbrandt@kbrandt-opadmin:~/scrap/make$