Makefile依赖项中的断点逻辑

Logic of breakoutline in Makefile depedencies

本文关键字:断点 依赖 Makefile      更新时间:2023-10-16

我正在阅读一个C库。我遇到了一个奇怪的makefile类型,在多行上有多个依赖项,比如:

phuonga: 
    echo ">>>>>>>>>>>phuong a"
.PHONY : phuonga
phuongb: 
    echo ">>>>>>>>>>>phuong b"
.PHONY : phuongb
phuongc: 
    echo ">>>>>>>>>>>phuong c"
.PHONY : phuongc
phuong: phuonga
phuong: phuongb
phuong: phuongc
    echo ">>>>>> Runned phuong"

但是当我运行make phuong时,结果是:

>>>>>>>>>>>phuong c
>>>>>>>>>>>phuong a
>>>>>>>>>>>phuong b
>>>>>> Runned phuong

不出现a,b,c或c,b,a。顺序是c a b为什么要遵循这个顺序?我不明白那个逻辑。

Thank much

第一个先决条件是总是包含配方的规则的先决条件列表中的先决条件。之后,按照在makefile中看到的顺序添加先决条件。所以对于:

phuong: phuonga
phuong: phuongb
phuong: phuongc
        echo ">>>>>> Runned phuong"

包含配方的行将phuongc列为先决条件,因此它总是排在第一位。之后,第一个先决条件是phuonga,所以接下来是phuongb

如果你这样写规则:

phuong: phuonga
phuong: phuongb
phuong: phuongc
phuong:
        echo ">>>>>> Runned phuong"

如果包含配方的规则中没有列出任何先决条件,那么它们将按照在makefile (phuonga, phuongb, phuongc)中定义的顺序出现。