goo blog サービス終了のお知らせ 

embeddedなブログ

組み込みシステムに関することや趣味に関することをダラダラと書いていきます(^^)

Visual StudioでBoostを使う際にCMakeで失敗する問題

2020-07-05 09:28:53 | Windows Embedded Standard

BoostをCMakeしてVisual Studioの環境で使おうとすると、うまくfind_packageが通らないケースがあります。なんとか解決出来たので、備忘録として記載しておきます。

まずBoostの公式ページから適切なバージョンのBoostソースコードをダウンロードして適当なフォルダに展開します。私の環境ではboost_1_73_0.zipをC:\Work\boost_1_73_0に展開しました。

コマンドプロンプトでC:\Work\boost_1_73_0に移動します。

.\bootstrap.bat 

を実行します。そして、下記でビルドします。--prefixにはインストール先フォルダを指定します。

.\b2 -d0 -j2 threading=multi variant=debug,release link=static runtime-link=static address-model=64 --prefix=c:\boost install 

ビルドが無事に通ったら、以下の環境変数を設定します。

BOOST_ROOT=C:\Boost
BOOST_INCLUDEDIR=C:\boost\include\boost-1_73
BOOST_LIBRARYDIR=C:\Boost\lib 

そして問題となるCMakeですが、マルチスレッドON、スタティックリンク、VisualStudio 2019の環境であれば、下記のように対象プロジェクトのCMakeLists.txt内で明示することで、うまくfind_packageが通ります。
set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME ON) 
set(Boost_ARCHITECTURE "-x64") 
set(Boost_COMPILER "-vc142") 
set(Boost_DEBUG ON) 
find_package(Boost REQUIRED filesystem)

-vc142はVisual Studio 2019の場合です。環境に応じて変更してください。詳しくはBoostのドキュメントを参考にしてください。

Boostビルド時に環境別にlibファイル名を設定しているのですが、本来find_packageが自動的に自分の環境に応じて、下記のように適切なファイル名を推測してリンク設定をするのですが、うまくいかないケースがあるようで、これを上記のように明示することで推測の手助けをします。

libboost_filesystem-vc142-mt-sgd-x64-1_73.lib → VS2019/static/debug/x64/boost1.73
libboost_filesystem-vc142-mt-s-x64-1_73.lib → VS2019/static/release/x64/boost1.73

以上です。


最新の画像もっと見る