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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.