Makefiles mit Zyklen -Verbesserte Info über vollständigen Zykluspfad

Gast #5484115
Lesenswert?

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
Gast #5484151
Lesenswert?

ja,
gehört schon :-) es löst aber nicht mein Problem.
CMake ist optimiert für Cross Platform (hab ich nicht) und die Strategie 
für Parallel Builds ist soweit ich verstanden habe der parallele Auifruf 
von vielen kleinen Make-Instanzen pro sub-dir. (Das würde ich auch nicht 
wollen)

Und ja, das Grundgerüst ist handgeschrieben, die Rules werden aber 
teilweise generiert, teilweise aus Steuerdateiien abgeleitet. Das sind 
dann mehrere tausend Targets :-)
Gast #5493561
Lesenswert?

Falls es mal jemand zufällig findet/das gleiche Problem hat:
mit make 3.81 geht es, wenn man als Argument ein nicht 
existentes/baubares Goal übergibt. Bei erreichbaren Goals erfolgt sofort 
ein Aufbrechen der Zyklen - dann ist da nichts mehr analysierbar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren