2015-02-11 4 views
0

build.jam:Как вы условно добавляете файл в исходники в boost.build?

project : usage-requirements <include>. ; 

alias PUB : : : : <use>/ProjectA//PUB 
        <use>/ProjectB//PUB ; 

lib LIB : [ glob *.c : feature.c ] 
     : <link>static 
      <use>/ProjectA//PUB 
      <use>/ProjectB//PUB ; 

Я хотел бы добавить цель, которая будет добавлять feature.c к источникам и определения USE_FEATURE. Я пробовал несколько разных вещей, но никто не работает так, как я хочу.

alias LIB_WITH_FEAT : LIB feature.c : <define>USE_FEATURE ; 

alias LIB_WITH_FEAT : LIB : <source>feature.c <define>USE_FEATURE ; 

не добавляет функции feature.c или USE_FEATURE в сборку. Но не дает никаких ошибок или предупреждений. Он просто строит LIB.

lib LIB_WITH_FEAT : feature.c LIB : <define>USE_FEATURE ; 

дает «предупреждение: невозможно построить LIB_WITH_FEAT». Хотя, если это сработало, я не думаю, что это было бы то, что я хотел, поскольку он попытался бы построить LIB отдельно, а LIB нуждается в правильной работе USE_FEATURE с функцией feature.c.

+0

Ваш вопрос ужасно неясен .. Что вы хотите добавить feature.c в? – GrafikRobot

+0

Извините, вы можете создать целевую LIB для создания библиотеки, но из некоторых проектов я хочу построить библиотеку с помощью функции X. Реализация Feature X находится в feature.c, а вызовы в основной библиотеке завернуты с помощью защитных устройств USE_FEATURE. Я хотел бы добавить цель, которая будет строить библиотеку, такую ​​как цель LIB, а также включить файл feature.c в источники и определить USE_FEATURE. –

+0

Получает ли мой ответ ниже то, что вы хотите? – GrafikRobot

ответ

1

Ваша основная проблема заключается в том, что <define> - бесплатная функция. И как таковая не вызывает дифференциации в варианте того, что строить. Чтобы сделать то, что вам нужно, вам нужно создать новую функцию, которая описывает, какую функцию вы выбираете (см. feature documentation). Например:

import feature : feature ; 
feature with-feat : no yes : optional propagated ; 

Затем вы можете определить, что хотите, по своим целям на основе значения этой функции. Например, чтобы определить символы или добавить источники:

lib LIB 
    : [ glob *.c : feature.c ] 
    : <link>static 
     <use>/ProjectA//PUB 
     <use>/ProjectB//PUB 
     <with-feat>yes:<define>USE_FEATURE 
     <with-feat>yes:<source>feature.c 
    ; 

Или вы можете использовать conditional правило стенографии, если у вас есть много дополнительных требований, чтобы добавить:

lib LIB 
    : [ glob *.c : feature.c ] 
    : <link>static 
     <use>/ProjectA//PUB 
     <use>/ProjectB//PUB 
     [ conditional <with-feat>yes : 
     <define>USE_FEATURE 
     <source>feature.c ] 
    ; 

Чтобы выбрать конкретный вариант этого LIB от другого укажите целевое задание в целевом задании:

exe my-feat-exe : source.cpp LIB/<with-feat>yes ; 

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

  • Нет связанных вопросов^_^