说我有这样的源文件的列表:如何使用GNUMake指定目标相关的先决条件?
SOURCE=aaa.src bbb.src ccc.src
我想创建一个规则来构建成对应的目标在自己的文件夹,它的名称依赖于源文件时。
的资源文件---->相应输出文件/靶
aaa.src -------------------> AAA/AAA .OUT
bbb.src -------------------> BBB/bbb.out
ccc.src --------- ----------> ccc/ccc.out
How do我使用GNUMake为此写了一个规则?我最好的努力是下面的Makefile:
.PHONY: all clean
CC=somecompiler
SOURCE := aaa.src bbb.src ccc.src
RTARGS := $(SOURCE:%.src=%.out)
TDIRS := $(addsuffix /,$(basename $(SOURCE)))
TARGS := $(join $(TDIRS), $(RTARGS))
all:$(TARGS)
%.out: $(SOURCE) # Better source specification?
@[ ! -d "$(dir $*)" ] && mkdir "$(dir $*)"
$(CC) "$(patsubst %/,%,$(dir $*)).src" "[email protected]"
clean:
rm -f $(TARGS)
rmdir --ignore-fail-on-non-empty $(TDIRS)
这里的问题是,任何一个目标(即.out
文件)取决于每源(即.src
文件),而不是只具有相同的一个基本名称。我可以将注释行更改为%.out: %.src
,但源文件必须与输出文件位于同一目录中。我也可以这样编译它:
%.out: %.src
$(CC) "$>" -o "$*/[email protected]"
但是,然后make会总是编译每个目标,不管它是否已经存在或不。
我该如何才能使用适当的源文件。 在通用规则中分别指定每个目标的相关性的正确方法是什么?
好的,基本上,ESTABLISH_DEPENDENCY在调用时会做的是创建一个空的规则,只是指定依赖关系和另一个创建目录的规则。我对吗?无论如何,这非常狡猾。谢谢! –
@ con-f-use权利。为了迂回,它只创建一个依赖关系,没有'.out'的规则。和目录的规则。 –
再次感谢。请忽略我的编辑,我完全忽略了“all:”已经在第三行 –