私たちは私たちの会社で同様の問題に直面してきました。ビルド環境でのブーストバージョンの管理は決して容易ではありません。 10人以上の開発者が、自分のシステムですべてのコーディングを行うと、何らかの自動化が必要になります。
まず、SVNやSCMシステムのブーストのような大きなライブラリのコピーを格納するのは良い考えではないと思います。ブーストでコードを変更する予定がある場合を除いて、それらのシステムは設計されていませんあなた自身。しかし、あなたがそれをやっていないと仮定しよう。
ここでは、さまざまな方法を試した後でこれを管理していますが、これは私たちにとって最適です。
使用するブーストのバージョンごとに、ツリー全体を解凍してファイルサーバーに配置し、コンパイルされたライブラリを置くアーキテクチャ/コンパイラの組み合わせごとに1つ追加のサブディレクトリを追加します。
BOOST_1_48=C:\boost\1.48 # Windows environment var
または
BOOST_1_48=/usr/local/boost/1.48 # Linux environment var, e.g. in /etc/profile.d/boost.sh
は、このディレクトリには、(ブースト/ * HPP。)ブースト・ツリーが含まれています は、我々はすべてのビルドシステム上でこれらのツリーのコピーを保存し、グローバルなシステム環境の中で、私たちのような変数を追加します
すべてのビルド構成(vsソリューション、vsプロパティファイル、gnuメイクファイルなど)は、内部変数を定義します(例:lib/win/x64/msvc2010/libboost_system * .lib、...) 、環境変数をインポートする:
BOOSTROOT=$(BOOST_1_48) # e.g. in a Makefile, or an included Makefile
さらにビルドルールはすべて、包含パスとライブラリ検索パスを定義するためにBOOSTROOT設定を使用します。
CXXFLAGS += -I$(BOOSTROOT)
LFLAGS += -L$(BOOSTROOT)/lib/linux/x64/ubuntu/precise
LFLAGS += -lboost_date_time
ブーストのローカルコピーを保持する理由は、コンパイル速度です。それはかなりのディスクスペース、特にコンパイルされたライブラリを占めますが、ストレージは安く、開発者はコードをコンパイルするのに多くの時間を浪費しません。さらに、これは一度だけコピーする必要があります。
グローバル環境変数を使用する理由は、ビルド構成があるシステムから別のシステムに移転可能であるため、安全にSCMシステムにチェックインすることができるからです。
私たちは少しスムーズにするために、コピーと地球環境の設定を担当する小さなツールを開発しました。 CLIを使用すると、これをビルドプロセスに含めることもできます。
異なる作業環境は異なるルールと文化を意味しますが、私は多くのことを試しましたが、最終的には何らかの規則を定義することにしました。私たちはあなたにインスピレーションを与えるかもしれません...
出典
2012-06-19 08:43:41
Pat
'g ++'を使っているのであれば、 'gzip'を使って一致させるのはなぜですか?ハハ悪い冗談、+1。 –
SVNから現代のSCMシステムに移行しますか?または、ブーストディレクトリをzipしてSVNに入れてチェックアウトを速くし、必要に応じてビルドプロセスの一部を解凍することもできます。 – bames53
@ bames53それについて考えてみましょう。多くの小さなファイルが抽出されるため、ウィンドウに時間を節約することはできません。確かに、それはやや良いでしょう。 – Notinlist