首页 > 解决方案 > 一个Makefile规则中的两个冒号是什么意思

问题描述

我知道规则语法应采用以下格式:

targets : prerequisites
        recipe
        …

但是,我在slave.mk中看到了下面的片段。

$(addprefix $(DEBS_PATH)/, $(SONIC_COPY_DEBS)) : $(DEBS_PATH)/% : .platform
    $(HEADER)
    $(foreach deb,$* $($*_DERIVED_DEBS), \
        { cp $($(deb)_PATH)/$(deb) $(DEBS_PATH)/ $(LOG) || exit 1 ; } ; )
    $(FOOTER)

第一行有两个':'。为什么?

标签: makefile

解决方案


这是静态模式规则的语法:

静态模式规则是指定多个目标并根据目标名称为每个目标构造先决条件名称的规则。它们比具有多个目标的普通规则更通用,因为目标不必具有相同的先决条件。它们的先决条件必须相似,但不一定相同。

这是静态模式规则的语法:

targets …: target-pattern: prereq-patterns …
    recipe
    …

targets列表指定了规则适用的目标。


推荐阅读