2016-04-12 10 views
0

Ich habe eine Aktion definiert, die Coverage-Dateien generiert, es braucht einige Optionen.bjam: Verwenden Sie die gleichen Aktionen für mehrere Regeln

actions coverage { 
    echo coverage $(OPTIONS) >> $(<) 
} 

brauche ich eine Regel, die $(OPTIONS) Variablen zu setzen:

rule coverage (targets * : sources * : properties *) { 
    OPTIONS on $(targets) = ... # Get from environment variables 
} 

Nachdem ich das getan habe, kann ich die Regel verwenden, um Deckung Dateien zu erzeugen:

make cov.xml : : @coverage ; 

Was ich will, ist eine zweite Regel (die die Variable $(OPTIONS) auf eine andere Weise berechnet), die dieselben Aktionen verwendet. Ist das möglich, ohne die Aktion selbst zu duplizieren? Mit anderen Worten, ist es möglich, zwei Regeln mit derselben Aktion zu verknüpfen?

Was ich will, ist so etwas wie dieses:

actions coverage-from-features { 
    # AVOID HAVING TO REPEAT THIS 
    echo coverage $(OPTIONS) >> $(<) 
} 
rule coverage-from-features (targets * : sources * : properties *) { 
    OPTIONS on $(targets) = ... # Get from feature values 
} 
make cov2.xml : : @coverage-from-features ; 

Offensichtlich ohne die Aktion zu wiederholen Befehle selbst (DRY und das alles).

Antwort

0

Der wichtigste Aspekt, den Sie brauchen, ist: Sie müssen keine Aktionen verwenden, die die aufgerufene Regel spiegeln. Eine Regel kann beliebige und mehrere Aktionen aufrufen, um die Arbeit zu erledigen. In Ihrem Fall können Sie so etwas tun:

actions coverage-action { 
    echo coverage $(OPTIONS) >> $(<) 
} 

rule coverage (targets * : sources * : properties *) { 
    OPTIONS on $(targets) = ... ; # Get from environment variables 
    coverage-action $(target) : $(sources) ; 
} 

rule coverage-from-features (targets * : sources * : properties *) { 
    OPTIONS on $(targets) = ... ; # Get from feature values 
    coverage-action $(target) : $(sources) ; 
} 

make cov.xml : : @coverage ; 
make cov2.xml : : @coverage-from-features ; 
+0

Scheint nicht zu funktionieren mit "Boost.Build V2 (Milestone 12) Boost.Jam 03.1.19". Kopierte deinen Code in eine Jamroot-Datei in einem leeren Ordner, 'bjam; bjam cov.xml; bjam cov2.xml'. Produzierte Build-Verzeichnisse, aber keine Ausgabedateien, anscheinend wurde die Aktion nicht ausgeführt (bestätigt mit -d + 2) –

Verwandte Themen