2010-04-26 3 views
5

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

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

ответ

7

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

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 структуру каталогов или нет. (Это, вероятно, будет.)

+0

Спасибо, случай B или, возможно, C - это то, что я ищу, я попробую B сначала, так как он прост. Спасибо за очень подробное объяснение. –

+0

Если это работает, вы должны нажать на галочку рядом с ответом, чтобы пометить его как ответ. Таким образом, другие знают, что на вопрос ответили. И я получаю кредит. :-) (Вы уже не принимали ответы на свои предыдущие вопросы.) – AFoglia

+0

Извинения, я сейчас выбрал его, я все еще привык к протоколу. –

Смежные вопросы