makefile shell 模式扩展:如何?

makefile shell 模式扩展:如何?

我发现了一个有趣的“特性”

DIR_INPUT=/测试
测试:
        # 测试日期(应该是昨天)
        测试!-z“${DATE}”
        ls -lad ${DIR_INPUT}/{a,c}

但它似乎以一种奇怪的方式起作用:

提示# 进行测试
# 测试日期(应该是昨天)
测试 ! -z“20100120”
ls -lad /测试/{a,c}
/test/{a,c}:没有此文件或目录
*** 错误代码 2
make:致命错误:目标“测试”命令失败
迅速的#

当然如果我发出ls -lad /测试/{a,c}从我的 shell 作品中。

问题:我怎样才能让 make 像 shell 那样评估这个模式?

答案1

您可以使用 shell 函数 $(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$

相关内容