4

ブースト ライブラリを使用するコード ベースに取り組んでいます。しかし、最近、新しいユーザーのマシンでベースを構築する際に問題が発生しました。問題を次のように煮詰めることができました。ビルドシステムは次のようになります。

/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 を使用しています。

4

2 に答える 2

0

「インクルード パス」コマンド ライン オプション (-I) を見てください。インクルードされたファイルを検索する場所を設定できます。ドキュメントはこちら

于 2013-02-12T21:12:54.230 に答える
0

gcc マニュアルのセクション 2.3 を参照してください: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

あなたが探しているコンパイラスイッチは、おそらく

-nostdinc

しかし、自分で見てください。

編集: おっと、私はあなたがデフォルトの検索パスを無効にしたくないのを見ました - その場合は -I スイッチを使用してください:

-Idir コマンド ライン オプションを使用して、このリストに追加できます。-I で指定されたすべてのディレクトリが、デフォルト ディレクトリの前に左から右の順序で検索されます。

于 2013-02-12T21:15:52.513 に答える