首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jam- Boost.build中指定jam内置功能

在jam- Boost.build中指定jam内置功能
EN

Stack Overflow用户
提问于 2013-07-16 16:06:56
回答 1查看 2.6K关注 0票数 2

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

代码语言:javascript
复制
b2 link=shared threading=multi address-model=64 

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

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

代码语言:javascript
复制
using msvc : 11.0;
<address-model>64;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 05:01:52

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

代码语言:javascript
复制
exe myexe : a.cpp : <address-model>64 ;

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

代码语言:javascript
复制
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,您可以使用以下技巧:

代码语言:javascript
复制
# 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重写命令行。如果您需要指定构建哪些库,我相信这是唯一的方法。

代码语言:javascript
复制
# 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中重写命令行更合适。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17671223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档