#c #boost #boost-build #b2 #jam
#c #ускорение #ускоренная сборка #b2 #замятие
Вопрос:
Я хочу условно использовать библиотеку (с альтернативами) для целей. Я не хочу добавлять такие условия, как <usefoo>yes:<library>foo
везде, но предпочитаю создавать распространяемую функцию. Однако b2 генерирует ошибки для следующего затора.
import feature ;
feature.feature usefoo : yes : propagated composite optional ;
feature.compose <usefoo>yes : <library>foo ;
lib foo : : : : <include>foo <define>USE_FOO ;
lib foo : : <toolset>gcc-10 : : <include>foo_gcc10 <define>USE_FOO ;
lib bar ;
# Undesirable because there may be lots of bars.
# lib bar : : <usefoo>yes:<library>foo ;
exe test1 : test.cc : <library>bar ;
exe test2 : test.cc : <usefoo>yes <library>bar ;
error: Recursion in main target references
error: the following target are being built currently:
error: ./test2 ./bar ./foo ./foo
Я также не могу ввести требования foo <usefoo>yes
. Кажется, что feature.compose
это не принимает условные требования. Каков правильный способ сделать это?
Ответ №1:
feature.compose <usefoo>yes : <library>foo ;
применяет требования ко всему, поэтому библиотека foo
получит <library>foo
требование, что создает неразрешимый цикл зависимостей.