2014-01-24 7 views
9

In VS wird normalerweise zwischen Build (inkrementell) und Rebuild unterschieden, wobei letzteres zuerst bereinigt wird, dann aber dasselbe wie Build. Kann ich mit FAKE ein ähnliches Verhalten erreichen?FAKE-Muster zum Trennen der Zielerstellungsreihenfolge von Abhängigkeiten

Lassen Sie sich die folgenden Ziele annehmen:

Target "Clean" DoNothing 
Target "Work" DoNothing 
Target "All" DoNothing 

RunTargetOrDefault "All" 

Normalerweise mag ich sie alle, Sauber vor der Arbeit laufen, so dass ich am Ende mit:

"Clean" ==> "Work" ==> "All" 

Allerdings ist Arbeit nicht wirklich abhängig auf Clean - nur wenn beide ausgeführt werden sollen, muss Clean zuerst ausgeführt werden. Mit der obigen Abhängigkeitskette kann ich Work nicht ausführen, ohne zuerst ausgeführt zu werden. Gibt es einen Weg oder ein gemeinsames Muster, um dies zu unterstützen?

Was ich in Betracht gezogen habe, so weit:

A)

"Clean" ==> "All" 
"Work" ==> "All" 

Dies stellt richtig, die Abhängigkeiten von allen, aber die Reihenfolge, Reinigen vor der Arbeit sein sollte - wenn beide ausgeführt werden - fehlt .

B)

Target "WorkOnly" DoNothing 
"WorkOnly" ==> "Work" 
"Clean" ==> "Work" ==> "All" 

Das ist ein bisschen näher, aber es garantiert noch nicht, dass, wenn alle Gebäude, die reinigen, bevor WorkOnly

C)

Target "Start" DoNothing 
"Start" 
    =?> ("Clean", not (hasBuildParam "noclean")) 
    ==> "Work" 
    ==> "All" 

Auf diese Weise läuft , Clean würde immer laufen, außer wenn ich "noclean" als Parameter festlege. Dies scheint mein Szenario vollständig zu unterstützen und ist tatsächlich ziemlich flexibel, kann aber ein wenig kompliziert werden, wenn es mehrere optionale Phasen gibt.

Ist das der beabsichtigte Weg und wie andere es auch tun, oder fehlt mir etwas Offensichtliches?

Antwort

3

Nein, im Moment gibt es dafür keinen Operator. Möglicherweise möchten Sie eine Pull-Anforderung mit einem neuen Operator erstellen.

Wir haben auch eine prototype implementation für eine zukünftige Zielabhängigkeit Laufzeit. Sie können auch versuchen, dort einen neuen Operator hinzuzufügen.

+1

Dank verlassen würde - ich über ein paar Optionen denken werden und kommen dann in –

+1

wir haben jetzt die Unterstützung für „soft Abhängigkeiten“ - siehe http: // fsharp.github.io/FAKE/soft-dependencies.html – forki23

+0

Ausgezeichnet, vielen Dank! –

8

Ich bin ein bisschen spät auf die Party .... Aber ich bin kürzlich in diese Art von Anforderung selbst geraten.

ich schließlich am folgenden siedelt:

  • Alle Aufgaben sind unabhängig
  • mehrere Endstatus Ziele erstellen, die unterschiedliche Abhängigkeiten definieren.

In Ihrem Fall, dass Sie mit

Target "Clean" DoNothing 
Target "Work" DoNothing 
Target "Build" (fun _ -> 
    Run "Work" 
) 
Target "Rebuild" (fun _ -> 
    "Clean" 
     ==> "Work" 

    Run "Work" 
) 
Verwandte Themen