我在root in a directory layout中有几个用config.xml
表示的小部件。
我在这里拥有的GNUmakefile能够构建它们。虽然如果我更新文件夹,则不会跟踪依赖项。我不想明显地依赖干净的目标,那么如何跟踪每个文件夹的内容?
WGTS := $(shell find -name 'config.xml' | while read wgtdir; do echo `dirname $$wgtdir`.wgt; done )
all: $(WGTS)
%.wgt:
@cd $* && zip -q -r ../$(shell basename $*).wgt .
@echo Created $@
clean:
rm -f $(WGTS)
我希望是这样的:
%.wgt: $(shell find $* -type f)
可以,但是不行。 Help。
最佳答案
将Beta's idea与我的结合:
WGTS:= $(shell find -name config.xml)
WGTS:= $(WGTS:/config.xml=.wgt)
WGTS_d:= $(WGTS:.wgt = .wgt.d)
全部:$(WGTS)
干净的:
rm -f $(WGTS)$(WGTS_d)
-包括$(WGTS_d)
定义WGT_RULE
$(1):$(shell找到$(1:.wgt =))
$(1:.wgt =)/%:
@
恩迪夫
$(foreach targ,$(WGTS),$(eval $(call WGT_RULE,$(targ)))))
%.wgt:
@echo创建$ @
@(echo -n“$ @:”;找到$ * -type f | tr'\n''')> $ @。d
@cd $ * && zip -q -r ../$(shell基本名$ *)。wgt。
例子:
$ mkdir -p foo bar/嵌套
$ touch {foo,bar/nested}/config.xml
$使
创建bar/nested.wgt
创建foo.wgt
$使
make:“all”什么都不做。
$ touch foo/a
$使
创建foo.wgt
$ rm foo/a
$使
创建foo.wgt
$使
make:“all”什么都不做。
这里唯一的潜在问题是虚拟规则,该规则使make忽略目标,而它却不知道如何构建嵌套在目录内的目标。 (在我的示例中为foo/a。)如果那些是需要了解如何构建的真实目标,则重复的配方定义可能是个问题。
关于makefile - 查找makefile依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6045710/