你如何有条件地将文件添加到boost.build中的源?

时间:2015-02-11 20:06:57

标签: boost boost-build

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一起正常工作。

1 个答案:

答案 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 ;