cmakeでboostが見つからない

新規フォルダに以下のCMakeFiles.txtを作成し実行してみる。

Boost_INCLUDE_DIRBoost_LIBRARY_DIRは自分の環境に合わせ、Boost_USE_STATIC_LIBSBoost_USE_MULTITHREADEDをON,OFFしてみる。

boostのビルドに時間がかかるので別のプリコンパイルヘッダを作成する

プリコンパイルヘッダはwindows.hなどの固定的なファイルをある程度までコンパイルしておいて、1ファイルのコンパイルのたびに最初からやり直さずにすることでビルドを高速化させるものです。通常はstdafx.hがプリコンパイルの対象になります。boostをこの中に入れてもいいのですが、このファイルを編集するとプリコンパイルヘッダ作成が必要で時間がかかるのでboost関係は別のプリコンパイルヘッダを作る方法です。

まずプリコンパイル用のファイルboostheader.hboostheader.cppを用意します。boostheader.hにはboostをインクルードし、boostheader.cppboostheader.hだけをインクルードします。

Visual Studioの設定でboostheader.cppを以下のようにしてプリコンパイルヘッダboostheader.pchを作成します。
clipshot 2015-12-01 05-36-33

boostを使う関数を書いたファイルboostfunc.cppはstdafx.hの代わりにboostheader.hをインクルードします。

boostfunc.cppの設定を以下のようにします。
a

BoostのregexをVC2005expressでつかう

BoostのregexをVC2005expressでつかう。

Windows.hやuser32.libがあってこれらを使ったコンパイルが通ることが前提。

1.47を使う。最新の1.49ではなんかおかしかったのでパスした。

展開したら、コマンドプロンプトを開き。まずVC2005のvcvarsallを実行する。

次に展開したboostの下の、C:\aaa\boost_1_47_0\libs\regex\buildに行く。

nmakeする。

環境変数INCLUDEやLIBが正しく設定されてないとエラーが出るので、以下のような感じで直す。

メイクが成功すると、vc8フォルダに*.libファイルがたくさんできる。
ファイル名の意味は以下のようになる。
先頭に “lib” がついてるのはスタティックライブラリ。大きい
‘s’ はランタイムへのスタティックリンクをしているもの。
‘d’ はデバッグビルドしたもの。
‘g’ はデバッグランタイムでビルドしたもの。
‘mt’ はマルチスレッドだが、これからはこれが標準(以下参照)

以下のコマンドを実行すれば、標準のLIBパスにコピーしようとするがここではやらない。

ここでできた*.libを適当な場所にコピーして、vc2005の「追加のライブラリパス」に追加する。
ただしメイクの際に/MLdを無視しますみたいなwarningが出てたのでシングルスレッドのは意味がないかもしれない。

最初にboostのインクルードを追加する。

これであとは、boostのソースコード(おそらく
config/auto_link.hpp)がコンパイル時に適切なlibを探してリンク(#pragma comment lib)してくれる。

以下はboostのサイトにあったソースコード

ワイド化してもコンパイルできる。