build.jam中:
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 ;
给出&#34;警告:无法构造LIB_WITH_FEAT&#34;。虽然如果它有效,但我认为它不是我想要的,因为它会尝试单独构建LIB,而LIB需要USE_FEATURE才能与feature.c一起正常工作。
答案 0 :(得分: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 ;