简而言之 - 你不应该那样做。工具集配置并不意味着将功能(如<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
.