c++ - 在 jam 文件中指定 Boost.build 内置功能

标签 c++ boost configuration bjam boost-build

如何在 jam 文件 (user-config.jam) 中指定用于构建 Boost 库的 Boost.build 内置功能?例如,我可以在 VS 命令提示符下使用 b2 来构建 boost 使用

b2 link=shared threading=multi address-model=64 

我需要通过 .jam 配置启用相同的功能。

我知道 Boost.build 系统可能会使用本地目录中的 user-config.jam,但我对语法感到困惑。我试过这个:

using msvc : 11.0;
<address-model>64;

但这似乎并不影响构建过程。

最佳答案

简而言之 - 你不应该那样做。工具集配置并不意味着将功能(如 <address-model> )硬编码到使用该工具集构建的所有目标。正确的方法是在所有正在构建的主要目标上设置此功能。

exe myexe : a.cpp : <address-model>64 ;

这也可以通过在项目目标上设置特征值来完成。

project my-project : requirements <address-model>64 ;

# Same as above, project requirements are applied to
# all targets in the project.
exe myexe : a.cpp ;

这本质上就是 Boost.Build 对命令行上指定的特性所做的。它们根据要求被解析并应用于所有顶级目标。

如果你真的想用user-config.jam确保所有目标都有 <address-model>64您可以使用以下技巧:

# In user-config.jam
import feature
feature.feature build-64 : on : composite ;
feature.compose <build-64>on : <address-model>64 ;

这定义了一个新特性。此功能不是可选的,因此 Boost.Build 将在所有正在构建的目标上使用它。默认值是第一个(也是唯一的)一个('on'),它是一个指定 <address-model>64 的组合。 ,所以这会应用于每个目标。

构建 Boost 时 - 您可以使用 user-config.jam 重写命令行。如果您需要指定构建哪些库,我相信这是唯一的方法。

# Un user-config.jam
local argv = [ modules.peek : ARGV ] ;
ECHO Old command line is '$(argv)' ;
modules.poke : ARGV : $(argv) --with-thread address-model=64 ;
argv = [ modules.peek : ARGV ] ;
ECHO New command line is '$(argv)' ;

但首先使用 shell 脚本传递正确的命令行似乎更合适,而不是在 user-config.jam 中重写它.

关于c++ - 在 jam 文件中指定 Boost.build 内置功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17671223/

相关文章:

c++ - 遍历 boost mapped_region/memory-mapped 文件?

c++ - Qt/C++ - 如何存储配置数据

asp.net - 问题映射HttpHandler->找不到HTTP错误404

c++ - 为什么std::vector和std::valarray初始化构造函数不同?

c++ - 为什么包含需要进一步的依赖?

c++ - 添加两个不同大小的 vector : Optimal Run-time and Optimal Memory Management

c++ - 在编译时初始化 double

c++ - Linux上的多核计算性能低下(openMP,boost::thread等)

c++ - 具有特殊情况实现的迭代器

java - 将配置传递给每个 GUI 对象的最佳实践