Hallo zusammen,
gibt es bei GNU-Make eine Möglichkeit die Zyklen zu bestimmen, bevor
Make sie rauswirft/auftrennt?
Bsp: Zyklus in den dependencys
1 | .PHONY: all t1 t2 t3 t4 inc
|
2 |
|
3 | all: t1 t2 t3 t4 inc
|
4 |
|
5 | t1: a b c t4
|
6 | echo 'making t1'
|
7 | echo > t1
|
8 |
|
9 |
|
10 | t2: a b c t1
|
11 | echo 'making t2'
|
12 | echo > t2
|
13 |
|
14 | t3: a b c t2
|
15 | echo 'making t3'
|
16 | echo > t3
|
17 |
|
18 |
|
19 | t4: a b c t3
|
20 | echo 'making t4'
|
21 | echo > t4
|
22 |
|
23 | inc a b c :
|
24 | echo 'making inc'
|
25 | echo > a
|
26 | echo > b
|
27 | echo > c
|
hier gibt es ganz klar einen Zyklus über t1->t2->t3->t4->t1
der Output von Make listet aber nicht den vollen Pfad, sondern nur einen
beliebigen Punkt.
1 | make -pRrq > prrq
|
2 | make: Circular t2 <- t1 dependency dropped.
|
Ich komme weder mit make -d noch mit make -p an die "rohen" Regeln, um
die Zyklen komplett selbst zu finden.
In der Realität werden Regeln on the Fly erfunden über $(eval... )
weshalb man sie nicht aus den (vielen per include eingebundenen) Dateien
lesen kann.
Kennt jemand dafür eine Lösung?
Mein Wunschergebnis wäre was in der Form
1 | a:
|
2 | all: t1 t2 t3 t4 inc
|
3 | b:
|
4 | c:
|
5 | inc:
|
6 | t1: a b c t4
|
7 | t2: a b c t1
|
8 | t3: a b c t2
|
9 | t4: a b c t3
|
und eben nicht
1 | a:
|
2 | all: t1 t2 t3 t4 inc
|
3 | b:
|
4 | c:
|
5 | inc:
|
6 | t1: a b c t4
|
7 | t2: a b c <-- die gedroppte dependency
|
8 | t3: a b c t2
|
9 | t4: a b c t3
|
Grüße
Michi