2016-04-12 2 views
0

У меня есть действие, которое генерирует файлы покрытия, оно принимает некоторые параметры.bjam: использовать те же действия для нескольких правил

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

Мне нужно правило, чтобы установить $(OPTIONS) переменную:

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

После того, как я сделал это, я могу использовать правило для создания файлов покрытия:

make cov.xml : : @coverage ; 

То, что я хочу является вторым правилом (которое вычисляет переменную $(OPTIONS) по-другому), которая использует те же действия. Возможно ли это без дублирования самого действия? Другими словами, можно ли связать два правила с тем же действием?

То, что я хочу что-то вроде этого:

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 ; 

Очевидно, не повторяя действия команд себя (DRY и все такое).

ответ

0

Ключевым аспектом, который вам нужен, является то, что вам не нужно использовать действия, которые отражают вызываемое правило. Правило может вызывать любые и несколько действий для выполнения работы. В вашем случае вы можете сделать что-то вроде:

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

Не работает для меня с "Boost.Build V2 (Milestone 12) Boost.Jam 03.1.19". Скопировал ваш код в файл Jamroot в пустой папке 'bjam; bjam cov.xml; bjam cov2.xml'. Произведенные каталоги сборки, но не выходные файлы, видимо, действие не было выполнено (подтверждено с -d + 2) –

Смежные вопросы