7

現在、プロジェクトの1つをGCCに移植していますが、x64とx86の両方のサポートが必要なため、これを実現するためにMinGW-w64プロジェクトを使用しています。

ただし、ビルド環境のセットアップで問題が発生しました。私のプロジェクトは現在BoostC++ライブラリを使用しており、ビルドプロセスを簡単にするために、プロジェクトでもBoost.Buildを使用しています(統合が簡単になるため)。

MSVCでは、コマンドラインから次の操作を実行できるため、これで問題ありません。

b2 toolset=msvc address-model=32 # compile as 32-bit
b2 toolset=msvc address-model=64 # compile as 64-bit

MinGW-w64は、32ビットと64ビットのツールチェーンが別々のディレクトリに格納されているため、この「問題」を引き起こしています。(それぞれC:\ MinGW32とC:\ MinGW64)。

アドレスモデルフラグに基づいて正しいツールチェーンを選択するようにBoost.Buildを設定することは可能ですか?そうでない場合、私の次善の選択肢は何ですか?

編集:

それが役立つ場合は、MinGW-w64Webサイトの「PersonalBuilds」フォルダーにあるrubenvb4.6.3-1ビルドを使用しています(特に、コードを解析してもらいたいので、これらのビルドを使用していますが、コンパイルはしていません) --Clangの下)。

編集:

私が今考えた解決策の1つは、コンパイル前にPATHが正しいツールチェーンを指すように「手動で」設定することですが、これにより、ビルドプロセスがさらに複雑になり、回避したいと思います。理想的には、MSVCの場合と同じくらい簡単にしたいと思いますが、これは不可能かもしれないと理解しています。最悪の場合、私が提案したものが機能すると思います。Boost.Buildを呼び出す前に、スクリプトを追加してPATHを正しく設定する必要があります。それはパスをハードコーディングすることを意味しますが、私はやりたくありません...

4

3 に答える 3

5

toolset.add-requirementsツールセット要件を (ルールを使用して) 追加することで、一致するプロパティのセットに基づいて任意の Boost.Build ツールセットを選択することができます。(Xcode)などの一部のツールセットでは、これに対するサポートが組み込まれdarwin.jamていますが、残念ながら、gcc ツールセットにはまだ追加されていません。user-config.jamただし、ツールセットを宣言するときに、同じ最小限のコードを使用できます。あなたの場合、次のようになります。

import toolset ;

using gcc : gcc-4.6.3~32 : /path/to/32bit/mingw/gcc ;
using gcc : gcc-4.6.3~64 : /path/to/64bit/mingw/gcc ;

# Add a global target requirements to "choose" the toolset based on the address model.
toolset.add-requirements <toolset>gcc-4.6.3~32:<address-model>32 ;
toolset.add-requirements <toolset>gcc-4.6.3~64:<address-model>64 ;

これには、指定された条件付き要件をすべてのターゲットに追加する効果があります。これには、必要に応じて、特定の宣言されたツールセットの特定のターゲットを選択する効果があります。

..言及するのを忘れました..これは2つの異なるツールセット宣言を作成していますが、デフォルトはまだ動的に選択されています。通常のコマンド ラインを使用します。

b2 toolset=gcc address-model=64

64 ビット mingw コンパイラを使用するには。

于 2012-01-16T14:08:38.723 に答える
3

MinGWバイナリの名前は異なるため、ブースディレクトリをパスに含めてから、2つの異なるツールセットをjam構成ファイルに追加して、バイナリファイルの正確な名前(パスを除く)を指定できるようにする必要があります。

設定ファイルに、フォーマットに基づいて以下を追加します

gccの使用:[バージョン]:[c ++-コンパイルコマンド]:[コンパイラオプション];

using gcc : 32 : mingw-w32-1.0-bin_i686-mingw ;
using gcc : 64 : mingw-w64-1.0-bin_i686-mingw ;

これで、次のようにb2を呼び出すことができるはずです。

b2 toolset=gcc-32
bt toolset=gcc-64
于 2012-01-11T09:58:29.613 に答える
0

MinGW-w64 は、32 ビットおよび 64 ビットのバイナリをビルドできます。

私は mingw64 toolchan で tdm-mingw を使用し、バージョンを選択するために-m32orのみ-m64をリンカー/コンパイラに渡します。デフォルトでは、64 ビットのバイナリがビルドされます。

于 2012-01-11T11:26:43.357 に答える