Makefile Make-如何将两个不同的文件复制到不同的位置
我不熟悉makefile语法。我想复制2个文件到不同的位置Makefile Make-如何将两个不同的文件复制到不同的位置,makefile,gnu-make,Makefile,Gnu Make,我不熟悉makefile语法。我想复制2个文件到不同的位置 DST := c:/A/a.txt \ c:/B/b.txt \ SRC := c:/src/1.bin \ c:/src/2.bin \ all: $(DST) $(DST): $(SRC) cp -f $< $@ DST:=c:/A/A.txt\ c:/B/B.txt\ SRC:=c:/SRC/1.bin\ c:/src/2.bin\ 全部:$(DST) $(
DST := c:/A/a.txt \
c:/B/b.txt \
SRC := c:/src/1.bin \
c:/src/2.bin \
all: $(DST)
$(DST): $(SRC)
cp -f $< $@
DST:=c:/A/A.txt\
c:/B/B.txt\
SRC:=c:/SRC/1.bin\
c:/src/2.bin\
全部:$(DST)
$(DST):$(SRC)
cp-f$<$@
上面的代码不起作用,因为$<是第一个先决条件。使用$^也不正确。我怎样才能做到呢?谢谢。考虑一下这扩展到:
c:/A/a.txt c:/B/b.txt : c:/src/1.bin c:/src/2.bin
cp -f $< $@
当然,这有一根尖锐的棍子——如果您明确地向
$(DST)
添加任何依赖项,那么如果源文件和dest文件之间没有任何可用的关系,并且您更喜欢使用比另一个答案中建议的更标准/更不复杂的规则集,make将填充$,您只需手工写出依赖项,如下所示:
DST := c:/A/a.txt \
c:/B/b.txt \
SRC := c:/src/1.bin \
c:/src/2.bin \
$(foreach IDX,$(shell seq 1 $(words $(DST))),\
$(eval \
$(word $(IDX),$(DST)) : $(word $(IDX),$(SRC))))
$(DST):
cp -f $< $@
DST := c:/A/a.txt \
c:/B/b.txt \
all: $(DST)
$(DST) :
cp -f $< $@
c:/A/a.txt : c:/src/1.bin
c:/B/b.txt : c:/src/2.bin
DST_/A/a.txt := c:/src/1.bin
DST_/B/b.txt := c:/src/2.bin
(makefile中不能有以DST
开头的其他变量;如果不够好,请选择一些唯一的前缀)
那么makefile的其余部分将是:
DST := $(foreach V,$(filter DST_%,$(.VARIABLES)),c:$($V))
all: $(DST)
.SECONDEXPANSION:
$(DST) : c:% : $$(DST_$$*)
cp -f $< $@
DST:=$(foreach V,$(filter DST%,$(.VARIABLES)),c:$($V))
全部:$(DST)
.第二次扩展:
$(DST):c:%:$$(DST_$$*)
cp-f$<$@
(很好的警告,我并没有实际测试,所以可能会有一些输入错误:)简单的回答是,除非有某种方法通过文件名匹配源和目标,否则自动创建规则是不容易的:它们有一些共同的词干。如果源文件和目标文件都是完全任意的,并且除了它们在SRC
和DST
变量中的位置之外没有任何关系,那么就没有直接的方法来编写makefile。您或者需要使用Harcorehynry建议的非常奇特的技巧,或者直接手写规则。如果你不在Windows上,这会简单得多。驱动器号和make不太协调。