ブースト ライブラリを使用するコード ベースに取り組んでいます。しかし、最近、新しいユーザーのマシンでベースを構築する際に問題が発生しました。問題を次のように煮詰めることができました。ビルドシステムは次のようになります。
/root
/SubModules_with_Makefiles_and_Code
/thirdparty/boost
サブモジュール コードは次のようにブーストのものを参照します (例):
#include <boost/property_tree/ptree.hpp>
サブモジュールの make ファイルは、次のようなコードをビルドします (例):
g++ -c -o code.o code.cpp -I/root/thirdparty/boost
サードパーティ製ブースト ライブラリはバージョン 1.37 です。ただし、一部のモジュールでは、新しいバージョンのブーストが使用され始めています。これらのモジュールがビルドされたマシンには /usr/include/boost にインストールされた boost 1.41 が含まれているため、この問題はマスクされています。
この問題が発生したのは、新しいユーザーのマシンの /usr/include に boost 1.41 がインストールされていなかったためです。理想的には、g++ がサード パーティのディレクトリでブーストを検索し、それ以外の場所を検索しないようにしたいと考えています。このようにして、コードベースの構築方法をより厳密に制御できます。
-I<dir> は、ルックアップ中にシステム インクルードの前に <dir> を配置しますが、システム インクルードは引き続き検索され、マシンによっては、boost の新しいバージョンをインストールできる場所になります。システムが含まれているのを見るのを抑えることはできますが、それは本当に苦痛です。
交換する以外に、とにかくこれを行うスマートな方法はありますか:
#include <boost/something.hpp>
に
#include <thirdparty/boost/something.hpp>
? 役に立ったら、redhat Linux で gnu make 3.81 と g++ 4.4.5 を使用しています。