gpt4 book ai didi

bjam - 如何在 bjam 中创建新变体

转载 作者:行者123 更新时间:2023-12-04 14:52:33 27 4
gpt4 key购买 nike

我试过阅读文档,但它相当难以理解,所以我希望有人可能有一个简单的答案。我想基于“调试”定义一个新的“变体”,它只是向编译器命令行添加一些宏定义,例如“-DSOMEMACRO”。我想我可以将其作为调试的“子变体”来执行,或者只是定义一个新的变体复制“调试”,但我什至不确定在哪里执行此操作。看起来 $BOOST_BUILD_DIR/build 中的 feature.jam 可能就是这个地方。也许我真正想要的只是一个新的“功能”,但我仍然不清楚我需要做什么以及在哪里做,而且我不知道“功能”是否允许我将构建产品定向到不同的目录到“调试”构建。

任何建议将不胜感激。 (如果您想知道,我必须使用 bjam,因为它已被采纳为我们的企业标准。)

最佳答案

我不太确定你想要什么,但有很多可能性。

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 rule 定义了一个名为 <steves-feature> 的特性有两个可能的值和三个属性。 composite表示它是由其他功能组成的功能(在本例中为 <define>SOMEMACRO )。 propagated意味着包含具有此功能集的目标的任何目标也将具有此功能集。和 link-incompatible表示带有 <steves-feature>on 的目标不能与带有 <steves-feature>off 的目标结合使用. (因此,如果任何目标设置了此功能,bjam 会将创建的文件放在名为 steves-feature-onsteves-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 是否会创建目录结构。 (它可能会。)

关于bjam - 如何在 bjam 中创建新变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715106/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com