相似文件名的makefile规则优先级
我有一个类似于以下内容的makefile:相似文件名的makefile规则优先级,makefile,gnu-make,Makefile,Gnu Make,我有一个类似于以下内容的makefile: dist/myapp_darwin.tar.gz: release myapp_%: $(SRC) recipe1 release: recipe2 sometarget: dist/myapp_darwin.tar.gz recipe3 我正在运行makesometarget,这需要dist/myapp\u darwin.tar.gz。由于第一行中的特定目标,我希望使用recipe2(发布目标)可以满足此要求,但它是使用recip
dist/myapp_darwin.tar.gz: release
myapp_%: $(SRC)
recipe1
release:
recipe2
sometarget: dist/myapp_darwin.tar.gz
recipe3
我正在运行makesometarget
,这需要dist/myapp\u darwin.tar.gz
。由于第一行中的特定目标,我希望使用recipe2(发布目标)可以满足此要求,但它是使用recipe1构建的。我做错了什么,我该如何解决
(就上下文而言,
myapp\u%
目标意味着在根目录中构建一个名为myapp\u darwin
的二进制文件,dist/myapp\u darwin.tar.gz
意味着构建一个不同的工件,一个用于分发的归档文件。)问题是make始终希望为每个目标创建一个配方。如果你写这篇文章时没有相关的食谱:
dist/myapp_darwin.tar.gz: release
这并不是为目标dist/myapp_darwin.tar.gz
定义规则,所做的只是向该目标添加一个新的先决条件release
。Make仍然需要搜索其规则数据库以找到用于构建目标的规则,并且它将匹配模式规则
因此,它将同时运行recipe2
,然后运行recipe1
如果要为目标声明显式规则,则必须给它一个配方,即使它是无操作:
dist/myapp_darwin.tar.gz: release
@:
现在make已经有了这个目标的配方,它不需要通过隐式规则搜索来寻找它。您也可以将它定义为一个空规则,即>>dist/myapp\u darwin.tar.gz:release;