要するに、そうすべきではありません。ツールセットの構成は<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)' ;
しかし、シェル スクリプトを使用して、最初に正しいコマンド ラインを渡す方が適切であると思われuser-config.jam
ます。