5

を使用してBoostバイナリライブラリを構築する場合、オプションに特定の値を使用することにより、特定のコンパイラバージョンを指定せずbjamに、使用するコンパイラを指定できます。例えば:--toolset=

bjam --with-serialization --toolset=msvc

ツールセットの値 msvcは、bjamシステムでMicrosoft Visual C ++のバージョンを検索しそれを使用してBoost.Serializationライブラリのさまざまなバリアントを構築するように指示します。結果のライブラリには、実際に使用されたツールセットを示すタグが含まれます。たとえば、上記のコマンドは次のようなファイルを作成します。

libboost_serialization-vc100-mt-s-1_44.lib
libboost_serialization-vc100-mt-sgd-1_44.lib
...

ここvc100で、ファイル名の文字列は、 Microsoft Visual C ++ 2010コンパイラバージョンが見つかり、ライブラリの構築に使用されたことを示すツールセットタグです。[Boostライブラリファイルの命名規則の詳細については、こちらをご覧ください。]

オプションに他の特定の値を使用して、コンパイラの特定のバージョンを指定することも--toolset=できます。例えば:

bjam --with-serialization --toolset=msvc-9.0

bjamシステムに複数のコンパイラがある場合でも、特にMicrosoft Visual C++2008を使用する必要があることを示しています。結果のライブラリには、 Microsoft Visual C++2008を使用してライブラリを構築したvc90ことを示すタグ文字列が含まれています。

Boostのドキュメントは、Macの新しいコンパイラに関しては少し古くなっているようです(たとえば、GCC、LLVM-GCC、LLVMをどのように区別しますか?)

私の質問は、 Mac上のXcode3およびXcode4の特定のコンパイラバージョン(のような一般的なコンパイラ名の値ではないbjam --toolset=)の他の値とそれに対応するタグのいくつかは何ですか?これらはどこかに文書化されていますか?一部のバージョンでBoostライブラリを構築することが、Boostでまだサポートされていない場合でも、およびタグの値はまだ指定されていますか?darwintoolset

???この表のを置き換えるのを手伝ってください:

TOOL AND VERSION               --toolset=     TAG
======================================================
Microsoft Visual C++ 2008      msvc-9.0       vc90
Microsoft Visual C++ 2010      msvc-10.0      vc100
Apple (1) GCC 4.0 (2)            ???          xgcc40
Apple GCC 4.2                    ???          xgcc42
Apple LLVM GCC 4.2               ???           ???
Apple LLVM compiler 1.5 (2)      ???           ???
Apple LLVM compiler 2.0 (3)      ???           ???

(1)Appleは、Apple固有の拡張機能と動作を追加するために、独自のバージョンのGCCおよびLLVMコンパイラを作成しています。

(2)Xcode3でのみ使用できます。

(3)Xcode4でのみ使用できます。

4

1 に答える 1

7

指定されたツールセットからタグのベース部分への直接マッピングがあります。したがって、darwin.jamツールセットを使用するように指定したApple Xcodeコンパイラの場合、タグの先頭は常にxgcc(Xcode GCCの場合)になります。2番目の部分、つまりコンパイラのバージョン番号は、通常、コンパイラ自体から自動的に検出されます。darwin.jamツールセットコードは、オプションを使用して、その-dumnpversionバージョンが何であるかを検出します(darwin.jam行#123を参照)。だからいくつかのこと:

  1. Xcodeの場合toolset=darwin、常にデフォルトになりますg++
  2. site-config.jamその他のデフォルト以外のバージョンの場合は、またはを設定して、user-config.jamBoost Buildに使用しているコンパイラの場所と種類を通知する必要があります(BB構成のドキュメントを参照)。
  3. 構成で指定したtoolset=darwin-<some_version>ものと一致します。
  4. darwin.jamツールセットは、ビルドしようとしているものに基づいたコンパイラのスマートな選択をサポートして、コンパイラを少し簡単にします。

たとえば、iOS開発には次のようなものを使用します。

using darwin : : /Xcode-path/usr/bin/g++-4.0 ;
using darwin : : /Xcode-path/usr/bin/g++-4.2 ;
using darwin : 4.2~iphone
:   /Xcode-path/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv6
:   <striper>
:   <architecture>arm <target-os>iphone
;
using darwin : 4.2~iphonesim
:   /Xcode-path/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2
:   <striper>
:   <architecture>x86 <target-os>iphone
;

私ができること:

  1. bjam toolset=darwin-4.0--GCC4.0を使用した通常のOSXビルドの場合。これにより、タグが作成されxgcc-42ます。
  2. bjam toolset=darwin-4.2--OSXおよびGCC4.2についても同様です。のタグを取得しxgcc-42ます。
  3. bjam toolset-darwin architecture=arm target-os=iphone--GCC4.2でiPhoneデバイスのビルドを実行します。タグもxgcc42衝突であることになります。ただし、これらのタグで説明できる量には制限があります。とにかくプラットフォーム間で構築された結果を分離するため、通常は問題になりません。

構成に追加することにより、LLVMコンパイラーの1つを使用してセットアップすることができます。

using darwin : 4.2~llvm~gcc : /Xcode-path/user/bin/llvm-g++ ;

そして、で呼び出しbjam toolset=darwin-4.2~llvm~gccます。残念ながら、タグもそうなりますxgcc-4.2(これも、の使用に基づいていdarwin.jamます)。したがって、結果のライブラリを他のGCCビルドから分離する必要があります。

また、残念ながら、コード以外で使用されるツールセットをタグ値にマッピングする場所が文書化されていません(BB common.jamの行#801から#841を参照)。

于 2010-09-07T20:43:38.783 に答える