Forum: PC-Programmierung Makefiles mit Zyklen -Verbesserte Info über vollständigen Zykluspfad


von michi42 (Gast)


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

von soso (Gast)


Lesenswert?

Michi,Du schreibst tatsächlich noch Deine Makefiles von Hand?
Schon mal was von CMAKE gehört?

Sonnige Grüße von den Kanaren!

von michi42 (Gast)


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 :-)

von michi42 (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.