Я не совсем уверен, что вы хотите, но есть ряд возможностей.
A. Вы всегда хотите компилировать с определенным макросом SOMEMACRO. В этом случае в Jamfile для вашего проекта добавьте
project
: requirements # These are requirements for this project
# If compiling debug, define SOMEMACRO
<variant>debug:<define>SOMEMACRO
: usage-requirements
# These are requirements projects using this project must have
<variant>debug:<define>SOMEMACRO
;
Если вам нужно всегда определять SOMEMACRO, вы можете удалить условие <variant>debug:
. Если вам нужно установить другие флаги, вы можете использовать <cflags>
, <cxxflags>
и <linkflags>
в зависимости от ситуации.
B. Вы хотите, чтобы быстрое переключение включало ваши флаги / определения, возможно, по умолчанию, возможно, нет, и сборки с ним не совместимы с сборками без него. В этом случае вы хотите функцию.
import feature ;
feature.feature steves-feature : off on
: composite propagated link-incompatible ;
feature.compose <steves-feature>on : <define>SOMEMACRO ;
Правило feature.feature
определяет функцию с именем <steves-feature>
с двумя возможными значениями и тремя свойствами. composite
означает, что это функция, состоящая из других функций (в данном случае <define>SOMEMACRO
). propagated
означает, что любые цели, которые включают цель с этим набором функций, также будут иметь этот набор функций. и link-incompatible
означает, что цели с <steves-feature>on
нельзя комбинировать с целями с <steves-feature>off
. (В результате bjam поместит созданные файлы в каталог с именем steves-feature-on
или steves-feature-off
, если эта функция установлена какой-либо целью.)
Эта функция может использоваться точно так же, как и функция <define>
, используемая в правиле проекта в предыдущем разделе. (Вы даже можете добавить его в раздел default-build
правила проекта.)
Обратите внимание, что вы также можете установить функции из командной строки: bjam steves-feature=on
.
C. Вы хотите полный вариант. Я думаю, что идея заключается в том, если у вас есть несколько общих конфигураций сборки с кучей различных функций, которые должны быть установлены вместе. Что ж, если вы уже создали эту функцию, как указано выше, теперь это просто.
variant steves-debug : debug : <steves-feature>on ;
Этот вариант будет таким же, как вариант debug
, но с дополнительной функцией <steves-feature>on
.
Я никогда не использовал правило variant
, поэтому его, возможно, придется импортировать откуда-то. Кроме того, вы могли бы сделать
variant steves-debug : debug : <define>SOMEMACRO ;
но я не знаю, создаст ли bjam структуру каталогов или нет. (Это, вероятно, будет.)