2011-12-25 10 views
1

私はコード作成の作業の一部で、BoostとThrust(CUDA用)などのテンプレートライブラリを使用していました。すべてのテンプレートライブラリをファイルに含めます

Boostライブラリの特定の機能を使用するには、適切なheader.e.gを含める必要があります。 boost::lexical_castの場合boost/lexical_cast.hppを使用する必要があります。私のプロジェクトに使用するBoost/Thrustの新機能ごとに適切なヘッダーを含めておくのは疲れている。

ブーストライブラリの下に格納されているすべてのヘッダファイルを含めるようにプリプロセッサに指示するショートカットがあるので、どのヘッダファイルをインクルードする必要はありませんか?

私はUbuntuでGCCを使用しています。

答えて

2

あなたは、単にそのようにマザー・オブ・すべてのヘッダファイルを作ることができる:

for i in $(find /usr/include/boost/); do echo "#include <"${i/"/usr/include/"/}">"; done > master_header.hpp 

今、あなたはそれを追加して、プリコンパイル済みヘッダを(あなたはPCHを作るために一晩コンパイルが必要な場合があります)を使用することができます。また、不要なライブラリを含まないようにするには、-Wl,-as-neededをリンカーに渡す必要があります。

@sbiによれば、少なくともこれはお勧めできませんが、あなたが尋ねた時から、時には "面倒"なものを見つけることに対する最善の救済策がどれほど悪くなるかを見ることです!

+0

さて、ここでは、技術的に質問に答えるための '+ 1 'があります。しかし、私は「お勧めできない」と言ったより少しひどかった。 – sbi

+0

@sbi:これは他に何もない場合は、利用可能なツールを使用する上での有用な練習となり、多分PCHと遊ぶかもしれません...もちろん、実際の問題に対して現実的な解決策にはならないでしょう。 –

+0

私はこの1つにsbiを持っています。私は試していないが、あなたがそれをコンパイルすることができれば、これは、大人が子犬のように大人になるようにするかもしれないと思う。 – sehe

6

あなたはそれを望んでいません。あなたはできるだけ少なくしたいと思っています。コンパイル時間はC++のそれほど深刻です。どこにでもすべてを含めるようになり、さらに悪化するでしょう。

私は、時間のまともなシングルコアCPUのコンパイルが50分かかり、5-10分をリンクするプロジェクトで作業しています。あなたが基礎の中でテンプレートを深く使っているなら、これは大きな時間を浪費します。

Boostには、コンパイラを最大限に拡張した(MPLのような)たくさんのものが付属しています。このようなものをどこにでも入れるのは難しいでしょう(5-cpp-filesのプロジェクトを除く)。

関連する問題