makefile 规则相似文件名的优先级
makefile rules precedence for similar file names
我有一个类似于以下内容的 makefile:
dist/myapp_darwin.tar.gz: release
myapp_%: $(SRC)
recipe1
release:
recipe2
sometarget: dist/myapp_darwin.tar.gz
recipe3
我是运行make sometarget
,需要dist/myapp_darwin.tar.gz
。由于第一行中的特定目标,我希望使用 recipe2(发布目标)可以满足此要求,但它是使用 recipe1 构建的。我做错了什么,我该如何解决?
(仅针对上下文,myapp_%
目标旨在在名为 myapp_darwin
的根目录中构建一个二进制文件,而 dist/myapp_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 有了这个目标的配方,它不需要通过隐式规则搜索来寻找配方。
我有一个类似于以下内容的 makefile:
dist/myapp_darwin.tar.gz: release
myapp_%: $(SRC)
recipe1
release:
recipe2
sometarget: dist/myapp_darwin.tar.gz
recipe3
我是运行make sometarget
,需要dist/myapp_darwin.tar.gz
。由于第一行中的特定目标,我希望使用 recipe2(发布目标)可以满足此要求,但它是使用 recipe1 构建的。我做错了什么,我该如何解决?
(仅针对上下文,myapp_%
目标旨在在名为 myapp_darwin
的根目录中构建一个二进制文件,而 dist/myapp_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 有了这个目标的配方,它不需要通过隐式规则搜索来寻找配方。