Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在我的Makefile中无法识别{a,b}形式的目标_Bash_Makefile_Gnu Make - Fatal编程技术网

Bash 在我的Makefile中无法识别{a,b}形式的目标

Bash 在我的Makefile中无法识别{a,b}形式的目标,bash,makefile,gnu-make,Bash,Makefile,Gnu Make,我有以下生成文件: SHELL:/bin/bash all: euro.n.{a,b} euro.{a,b}: touch euro.{a,b} euro.n.{a,b}: euro.{a,b} cat euro.a > euro.n.a cat euro.b > euro.n.b 现在,如果我运行两次make,那么在第二次运行中,makefile将无法识别文件euro.n.a和euro.n.b已经创建(并且将再次执行) 有什

我有以下生成文件:

SHELL:/bin/bash

all: euro.n.{a,b}

euro.{a,b}:
        touch euro.{a,b}

euro.n.{a,b}: euro.{a,b}
        cat euro.a > euro.n.a
        cat euro.b > euro.n.b

现在,如果我运行两次
make
,那么在第二次运行中,makefile将无法识别文件euro.n.a和euro.n.b已经创建(并且将再次执行)

有什么问题

有什么问题

{a,b}
是GNU make无法识别的语法

SHELL:=/bin/bash
(您错过了那里的
=
)只会影响配方的语法


一种替代解决方案:

SHELL := /bin/bash

all: $(addprefix euro.n.,a b)

euro.%:
        touch $@

euro.n.% : euro.%
    cp $< $@
SHELL:=/bin/bash
全部:$(添加前缀euro.n.,a b)
欧元。%:
触碰$@
欧元:欧元
cp$<$@

我理解这一点,但make是否有类似的语法可识别?@user86834在GNU make手册中查找
$(addprefix…
$(addsuffix…
$(patsubst…
)。@user86834注意具有多个目标的makefile规则:GNU make使用普通的POSIX glob(3)和fnmatch(3)用于进行文件全局处理的函数。请参阅这些函数的手册页,以了解已识别的语法。@很抱歉,我不能将您的语句与上下文联系起来。