3

ビルドされたプロセスにBoostライブラリを含めるためのベストプラクティスは何ですか?

説明のために、私たちのプロジェクトがBoostの正規表現を利用し、次のようにコンパイルされていると仮定します。

g++ -lboost_regex -o main main.cpp

…これは、次のものだけを含むMakefileを作成できることを意味します。

LDFLAGS+=-lboost_regex

残念ながら、これは私のシステムでは機能しません。

$ make main
ld: library not found for -lboost_regex
collect2: error: ld returned 1 exit status

ライブラリパスを指定しなかったので、これは理解できます。Boostは、コンパイラが見つけられない場所にインストールされます。

もちろん、Makefileにそのパスをハードコーディングしたくありません。そうしないと、プロジェクトを他のマシンでビルドできません。

1つの解決策は設定することですLD_LIBRARY_PATHが、これはお勧めできません

通常のライブラリの「実際の」ソリューションはpkg-config、たとえば次のように使用することです。

LDFLAGS+=$(shell pkg-config --libs sqlite3)

…これは、の線に沿った何かに解決されます-L/path/to/sqlite/lib -lsqlite3

残念ながら、Boostはまだをサポートしていませんpkg-config

これは私にジレンマを残します。Boostライブラリのインストールパスを決定する普遍的な方法はないようです。他のプロジェクトはこれをどのように処理しますか?

(誰かが環境変数を提案しましたBOOST_ROOTが、それも普遍的に存在するようには見えません。bashrc/ profileファイルの1つに手動で設定する必要があります。)

4

1 に答える 1

2

の使用を提案したのBOOST_ROOTは私なので、答えとして挙げることもできます。

背景: ブーストインストール ルート内で実行されない場合、ブーストのbjamビルド プログラムには環境変数が必要です。 この考えでは、それに「依存」することもできます。つまり、常に完全な環境変数として保持するか、セッション中に設定するか、.BOOST_ROOT
makeBOOST_ROOT=/foo/bar/boost make

于 2012-08-31T10:05:17.720 に答える