Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Makefile 生成文件置换_Makefile_Permutation_Cartesian Product - Fatal编程技术网

Makefile 生成文件置换

Makefile 生成文件置换,makefile,permutation,cartesian-product,Makefile,Permutation,Cartesian Product,Bash可以生成置换(): 我想用makefile做一些类似的事情。这里有一个例子 生成文件: all: 1a 1b 2a 2b 如果可能的话,我想要这样的东西: NOV = 1 2 OSC = a b all: $(NOV)$(OSC) 然而,当我使用这样一个例子时,它只是创建了“12ab”,而不是 把它们结合起来。这可能吗?SHELL:=/bin/bash SHELL := /bin/bash NOV := 1,2 OSC := a,b NOVW := 1 2 OSCW := a b

Bash可以生成置换():

我想用makefile做一些类似的事情。这里有一个例子 生成文件:

all: 1a 1b 2a 2b
如果可能的话,我想要这样的东西:

NOV = 1 2
OSC = a b
all: $(NOV)$(OSC)
然而,当我使用这样一个例子时,它只是创建了“12ab”,而不是 把它们结合起来。这可能吗?

SHELL:=/bin/bash
SHELL := /bin/bash

NOV := 1,2
OSC := a,b

NOVW := 1 2
OSCW := a b

EXP := $(shell printf "%s " {$(NOV)}{$(OSC)})
EXPW := $(foreach X,$(NOVW),$(foreach Y,$(OSCW),$(X)$(Y)))

.PHONY: all a b $(EXP) $(EXPW)

all: a b

a: $(EXP)
    @echo target a
    @printf "my first prerequisite is %s\n" "$<"
    @printf "all my prerequisites are %s\n" "$^"

b: $(EXPW)
    @echo target b
    @printf "my first prerequisite is %s\n" "$<"
    @printf "all my prerequisites are %s\n" "$^"
十一月:=1,2 OSC:=a,b NOVW:=12 OSCW:=AB EXP:=$(shell printf“%s”{$(11月)}{$(OSC)}) EXPW:=$(外汇汇率X,$(NOVW),$(外汇汇率Y,$(OSCW),$(X)$(Y))) .冒牌货:全部a b$(EXP)$(EXPW) 全体:a b a:$(EXP) @回波目标a @printf“我的第一个先决条件是%s\n”“$
SHELL:=/bin/bash
十一月:=1,2
OSC:=a,b
NOVW:=12
OSCW:=AB
EXP:=$(shell printf“%s”{$(11月)}{$(OSC)})
EXPW:=$(外汇汇率X,$(NOVW),$(外汇汇率Y,$(OSCW),$(X)$(Y)))
.冒牌货:全部a b$(EXP)$(EXPW)
全体:a b
a:$(EXP)
@回波目标a

@printf“我的第一个先决条件是%s\n”“$不需要任何复杂的循环或从shell借用。这比那简单得多

$(foreach p, $(NOV), $(addprefix $p, $(OSC)))

不需要任何复杂的循环或从shell借用。这比那简单得多

$(foreach p, $(NOV), $(addprefix $p, $(OSC)))

没有外壳,Make无法工作。Makefile中的每个配方行都是shell语法,为其启动了一个单独的shell进程,因此您不能在一行中执行
cd
,而在下一行中将其放在该目录中。所以基本上,这是没有意义的。这一点的具体方面不是“干净”的,因为使用了逗号分隔的数据表示法,这并不能很好地用作生成单词列表。但是,最后的
EXP
变量至少是值得的。我将foreach方法放在同一个Makefile中。并列比较:)没有外壳,Make无法工作。Makefile中的每个配方行都是shell语法,为其启动了一个单独的shell进程,因此您不能在一行中执行
cd
,而在下一行中将其放在该目录中。所以基本上,这是没有意义的。这一点的具体方面不是“干净”的,因为使用了逗号分隔的数据表示法,这并不能很好地用作生成单词列表。但是,最后的
EXP
变量至少是值得的。我将foreach方法放在同一个Makefile中。并列比较:)
$(foreach p, $(NOV), $(addprefix $p, $(OSC)))