2

Boost ライブラリのビルドに使用する Jam ファイル (user-config.jam) で 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;

しかし、これはビルド プロセスには影響しないようです。

4

1 に答える 1

4

要するに、そうすべきではありません。ツールセットの構成は<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ます。

于 2013-07-16T21:01:51.840 に答える