我在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/

10-13 06:43