web-dev-qa-db-ja.com

ブースト用に32ビットと64ビットのライブラリを同時にビルドしますか?

オプション「--address-model = 32,64」は32と64の両方のライブラリをビルドしますか、それとも2つの別々のビルドを行う必要がありますか?

28
PopcornKing

実行:

b2 address-model=32,64

または.

b2 address-model=32,64,32_64

最初のケースでは、ツールセットとプラットフォームのサポートに応じて、32ビットと64ビットの両方のターゲットを処理および生成します。そして32、64、および32 + 64ユニバーサルターゲット(おそらくdarwinツールセットを使用するOSXでのみ。そして「機能する」とは、darwin toolset。したがって、構文が間違っていると思います。つまり、「-name = values」はオプションではないので使用しないでください。代わりに、「name = values」を使用してください。

21
GrafikRobot

ドキュメントは次のように述べています(私の強調):

どちらか 32ビットまたは 64ビットのコード生成を明示的に要求します。」

「1つ以上」または「少なくとも1つ」を表示していないことに注意してください。それは...またはを意味します。つまり、XORを読んで、経験が一致することを意味します。それ。

許可された値のリストのコンマは、許可された値のセットの2つの項目を区切るためのものです。

11
Flexo

私は次のことをしてしまいました:

  • 32 lib/dllビルドを/ lib32と呼ばれる別のフォルダーに保存します。
  • 64 lib/dllビルドを/ lib64という名前のseaprateフォルダーに保存します

どちらも、stageまたはinstallationフォルダーなど、boostがすでにチェックしている検索パスにあることが好ましい。

次に、ヘッダーの下に検索パスがアセンブルされた直後にこのブロックを追加しました(FindBoost.cmake編集するファイルはshare/cmake-3.1/Modules /フォルダーの下にありますCMakeインストールフォルダー)

ブーストライブラリの検索を開始する


...

if(Boost_LIBRARY_DIR)

...

endif()

#generate 32 and 64 bit paths
if(WIN32)
    if(CMAKE_CL_64)
        #message("Finding BOOST on windows platform (64 bit)")
        SET(BOOST_libdir_suffix_gen "64")
    else()
        #message("Finding BOOST on windows platform (32 bit)")
        SET(BOOST_libdir_suffix_gen "32")
    endif()

    list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS "")
    foreach(SEARCH_DIR_NOPLATFORM ${_boost_LIBRARY_SEARCH_DIRS})
        list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS ${SEARCH_DIR_NOPLATFORM}${BOOST_libdir_suffix_gen})        
    endforeach()
    foreach(SEARCH_DIR_PLATFORM ${_boost_LIBRARY_SEARCH_DIRS_PLATFORMS})
         list (APPEND _boost_LIBRARY_SEARCH_DIRS ${SEARCH_DIR_PLATFORM})
    endforeach()
else()
    # no generation required (?)
endif()  

既存のすべてのlibディレクトリーを、64ビットまたは32ビットの拡張タグが付いたライブラリーのブースト検索パスに再度追加します。これにより、リンクする正しいターゲットライブラリが選択され、ブースト依存パスをリセットせずに、32または64ターゲットビルド用の他の依存cmakeライブラリ(CGALなど)を安全に再生成できます。

6
StarShine