Makefile在运行时修改依赖项

Makefile在运行时修改依赖项,makefile,dependencies,Makefile,Dependencies,我想做的是: $(UNTAR_MARKER): $(TARFILE) tar -xjkf $(TARFILE) touch $(UNTAR_MARKER) %.installed : %.untarred dowork $^ $@ install: ???? 在哪里????将是tarfile中一些*.untarred文件的列表。我有一个shell命令可以生成列表,但它只有在文件被untarred后才能工作。这里的问题是: 1我不想做tar-tf,因为这是一个很大的t

我想做的是:

$(UNTAR_MARKER): $(TARFILE)
    tar -xjkf $(TARFILE)
    touch $(UNTAR_MARKER)

%.installed : %.untarred
    dowork $^ $@

install: ????
在哪里????将是tarfile中一些*.untarred文件的列表。我有一个shell命令可以生成列表,但它只有在文件被untarred后才能工作。这里的问题是:

1我不想做tar-tf,因为这是一个很大的tar文件,我不想运行tar两次

2我希望避免代码中的for循环在每个文件中循环,这不能利用并发性,并且会使makefile复杂化,因为tar文件是动态的-第三方可以很容易地向其中添加文件,我不想处理旧文件

3我希望在makefile进行解析时避免出错,因为这太难看了


我想知道是否有一种简单的方法可以动态创建依赖项列表,并在运行规则后对其进行修改。

我不太明白您在这里想做什么,但这听起来像是包含makefile的东西可以帮助您完成的。有关如何工作的信息,请参阅。有趣的。。。所以基本上,我可以有一个规则,说当前的makefile依赖于UNTAR_标记规则。卸载发生后,将重新解析当前生成文件。如果????扩展为$shell find-name*.untarred | sed s/untarred/installed/然后将使用更新的文件系统重新运行此shell命令。。。我想知道在这种情况下,假目标会发生什么-它们会重新运行吗?我得玩这个……像那样的东西,是的。虽然我会转储$UNTAR_标记以支持tar-contents.mk,并在那里创建一个有效的makefile,其中包含一个变量定义,类似于tar_contents=。。。。您在untar/etc处理过程中填写的。