Я не совсем уверен, чего вы хотите, но есть ряд возможностей.
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>
и в зависимости от ситуации.
B. Вам нужен быстрый переключатель для включения флагов/define, возможно, по умолчанию, возможно, нет, и с ним встроены не совместимы с сборками с ним. В этом случае вам нужна функция.
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 структуру каталогов или нет. (Это, вероятно, будет.)
Спасибо, случай B или, возможно, C - это то, что я ищу, я попробую B сначала, так как он прост. Спасибо за очень подробное объяснение. –
Если это работает, вы должны нажать на галочку рядом с ответом, чтобы пометить его как ответ. Таким образом, другие знают, что на вопрос ответили. И я получаю кредит. :-) (Вы уже не принимали ответы на свои предыдущие вопросы.) – AFoglia
Извинения, я сейчас выбрал его, я все еще привык к протоколу. –