2013-03-15 66 views
1

我在我的Makefile有一行是关于类似的东西:由于zsh,Makefile不扩展glob?

prog /something/f.{one,two,three}

但在运行make文件我从

/something/f.{one,two,three}不存在PROG得到。这导致我相信,使 不扩大glob。通常情况下,这将在Bash中适用于我,但我现在正在运行zshell,所以我认为这是问题所在。任何人都知道如何可移植地指定该模式?

+1

除了下面的答案,注意使_always_运行/斌/当它调用一个shell时。它不会运行用户喜欢的任何shell(想象一下什么是可移植性灾难!)大括号扩展不是sh的POSIX标准的一部分,所以/ bin/sh通常不支持它。 – MadScientist 2013-03-15 13:14:48

+0

您可以在Makefile中将'SHELL'设置为'/ bin/zsh',但这会导致@MadScientist提及的可移植性灾难(如果使用您的Makefile的用户没有'/ bin/zsh',则Makefile会'为他们工作)。 – chepner 2013-03-15 14:06:08

回答

1

来建议什么ThePosey另一种方法是制作的使用addprefix

FILE_SUFFIXES := one two three 
FILE_BASE := /something/f 

FILES := $(addprefix $(FILE_BASE).,$(FILE_SUFFIXES)) 

my_rule: 
    prog $(FILES) 
+1

我想你的意思是'FILE_SUFFIXES:=一二三'。 – bobbogo 2013-03-15 15:31:37

+0

@bobbogo - 是的!接得好 :) – Tuxdude 2013-03-15 15:51:16

1

是否需要扩展壳体? Make可以为你做类似的事情。这仅仅是一个办法做到这一点:

EXPANDED_POSTFIX := one two three 
BASE_FILE := f. 

PROG_FILE_LIST := $(foreach post,${EXPANDED_POSTFIX},${BASE_FILE}${post}) 

exec_prog: 
    prog ${PROG_FILE_LIST}