比方说我的Makefile正在建立一个网站。我写了一个包含资产的index.html
,如下所示:
<html>
<body><img src="asset/foo.img"/></body>
</html>
现在,我想编写一条规则来创建一个包含HTML及其资产的ZIP存档。
我编写了一个脚本来解析src=
属性,但是该如何处理?
如果我将其放在配方中,但那时不能更改Makefile规则。
如果我将其放在$(shell ...)
命令中,那么即使用户正在执行clean
或其他操作,它也必须在每次Makefile解析时运行。
处理这种情况的正确方法是什么?
答案 0 :(得分:1)
实际上,我想我自己才知道。解决方案是对$(MAKE)
的子调用-实际上,与include
相比,它的主要区别似乎是它在配方执行时而不是解析时发生。
答案 1 :(得分:0)
也许是这样的
assets := $(shell ./myscript index.html)
myzip.zip: index.html $(assets)
zip $@ $^
答案 2 :(得分:0)
我似乎想念你的问题。是不是您所处的依赖关系树看起来像这样:
my_page.html image1.bmp image2.bmp
| | | |
1 2 2 2
| | | |
| \ | /
| \ | /
| \ | /
| \ | /
| \ | /
| \ | /
depend.dep archive.zip
其中“ 1”是扫描my_page.html
的所有资产并将其写回到depend.dep
(或makefile本身,不会改变解决方案)的规则,而“ 2”正在更新具有更改的成员文件的zip文件?由于make试图在执行其他任何规则之前重新制作depend.dep
(或makefile
本身),因此在启动make运行时,您始终具有最新的依赖项列表,该列表将完全您命令:将成员添加/更新到archive.zip
(如果较新)。我再说一遍:如果解析my_page.html
相对于依赖关系已更改,则在运行过程中重新解析步骤 zero ,如果存在对{{1 }} d或include
本身。