Ошибка ускоренной сборки рекурсии в основных целевых ссылках

#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 требование, что создает неразрешимый цикл зависимостей.