我不太确定你想要什么,但有很多可能性。
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> 和<linkflags>。
B.您想要一个快速开关来打开您的标志/定义,也许是默认情况下,也许不是,并且打开它的构建与关闭它的构建不兼容。在这种情况下,您需要一个功能。
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 是否会创建目录结构。 (可能会。)