как создать новый вариант в bjam

Я попытался читать документацию, но это довольно непроницаемо, таким образом, я надеюсь, что у кого-то может быть простой ответ. Я хочу определить новый 'вариант', на основе 'отладки', которая просто добавляет некоторые макроопределения к командной строке компилятора, например, "-DSOMEMACRO". Я думаю, что могу делать это как "подвариант" отладки или иначе просто определять новое различное копирование 'отладка', но я даже не уверен, где сделать это. Похоже, что feature.jam в $BOOST_BUILD_DIR/build может быть местом. Возможно, то, что я действительно хочу, является просто новой 'функцией', но мне точно все еще не ясно, что я должен сделать и где, и я не знаю, позволяет ли 'функция' мне направлять продукты сборки к другому каталогу к сборке 'отладки'.

Любые предложения будут цениться. (В случае, если Вы задаетесь вопросом, я должен использовать bjam, так как он был принят как наш корпоративный стандарт.)

5
задан AFoglia 27 April 2010 в 15:13
поделиться

1 ответ

Я не совсем уверен, что вы хотите, но есть несколько возможностей.

А. Вы всегда хотите компилировать с определенным макросом 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, вы можете удалить условие debug: . Если вам нужно установить другие флаги, вы можете использовать , и по мере необходимости.

Б. Вам нужен быстрый переключатель, чтобы включить ваши флаги / определение, возможно, по умолчанию, а может и нет, и сборки с этим включенным несовместимы со сборками, в которых он выключен. В этом случае вам нужна функция.

import feature ;
feature.feature steves-feature : off on
  : composite propagated link-incompatible ;
feature.compose <steves-feature>on : <define>SOMEMACRO ;

Правило feature.feature определяет функцию с именем с двумя возможными значениями и тремя свойствами. составной означает, что это функция, состоящая из других функций (в данном случае SOMEMACRO ). распространено означает, что любые цели, которые включают цель с этим набором функций, также будут иметь этот набор функций. и link-несовместимость означает, что цели с на не могут быть объединены с целями с выключенными . (В результате bjam поместит созданные файлы в каталог с именем steves-feature-on или steves-feature-off , если эта функция установлена ​​какой-либо целью.)

Эту функцию можно использовать так же, как функцию , используемую в правиле проекта в приведенном выше разделе. (Вы даже можете добавить его в раздел default-build правила проекта.)

Обратите внимание, что вы также можете установить функции из командной строки: bjam steves-feature = on .

С. Вам нужен полный вариант. Я думаю, что идея в том, что у вас есть несколько общих конфигураций сборки с кучей разных функций, которые должны быть установлены вместе. Что ж, если вы уже создали функцию, как указано выше, теперь это легко.

variant steves-debug : debug : <steves-feature>on ;

Этот вариант будет таким же, как вариант отладки , но с дополнительной функцией на .

Я никогда не использовал правило вариант , поэтому его, возможно, придется откуда-то импортировать. Кроме того, вы могли бы сделать

variant steves-debug : debug : <define>SOMEMACRO ;

, но я не знаю, создаст ли bjam структуру каталогов или нет. (Вероятно, так и будет.)

7
ответ дан 14 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: