問題タブ [boost-build]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Windowsでx64Boostライブラリをどのように構築しますか?
x86 Boostライブラリを何度もビルドしましたが、x64ライブラリをビルドできないようです。「VisualStudio2005x64 Cross Toolsコマンドプロンプト」を起動し、通常のビルドを実行します。
ただし、それでもx86 .libファイルが生成されます(これはdumpbin / headersで確認しました)。私は何が間違っているのですか?
build - bjam でスペースを含むファイル名を操作するにはどうすればよいですか?
Jamfile に外部ライブラリを記述する必要があります。ライブラリの場所は環境変数に保持されます。
Jamfile のスニペットは次のとおりです。
- をちょきちょきと切る -
- スピン -
「C:\Program」が見つからないという bjam の鳴き声。Jamfile で lib ルール呼び出しを取得して、スペースが埋め込まれたパスを受け入れるにはどうすればよいですか?
boost - Boost Build での libexpat へのリンクに関する問題 - graphml のビルド用
私のシステムでは、expat は次の場所にあります。
だから私はブーストに必要な変数をエクスポートしてgraphmlを構築します
次に実行します ($DIR と $BOOST は、インクルードとライブラリを移動するパスを生成します)
次のエラーが表示されます。
どのブーストが言うのは、次の行が原因です。
-L"/usr/lib"
および-lexpat
引数としてexpatライブラリを見つけられない方法がわかりませんか? 私の理解では、 /usr/lib/libexpat.dylib は正確に and として参照され-L"/usr/lib"
てい-lexpat
ます。
graphml をビルドするための Jamfile はこちらです。EXPAT_INCLUDE
とが設定されていない場合、EXPAT_LIBPATH
警告が表示されます (jamfile の 39 ~ 41 行目)。
警告: グラフ ライブラリには、オプションの GraphML リーダーが含まれていません。
注: GraphML サポートを有効にするには、EXPAT_INCLUDE を設定し、
注: Expat ヘッダーとライブラリをそれぞれ含むディレクトリを設定します。
c++ - Boost.Build が #include ディレクティブのヘッダー ファイルを再帰的にスキャンするのを防ぐ方法はありますか?
Boost.Build が #include ディレクティブを再帰的にスキャンするヘッダー ファイルを特定のディレクトリまたはディレクトリのセットに制限する方法はありますか? つまり、プロジェクト内のヘッダー ファイルのみを再帰的にスキャンしたいと考えています。それらの外部依存関係は変更されないことを私は知っています (そして、Boost と Qt はかなり大きいです)。依存関係ツリーに約 50,000 のターゲットがあり、処理に時間がかかります (ファイルが実際に変更されていなくても、ビルド時間は 1 ~ 2 分です)。
これまでに見つけた唯一の解決策は、INCLUDE 環境変数を利用することです (私は MSVC を使用しています)。これは、Boost.Build にインクルード パスを通知する必要がないことを意味します (私はこの機能を使用しています)。それらをスキャンしないでください。これはちょっとしたハックのようです。
ほとんどすぐにこれに遭遇したにもかかわらず、同様の問題を経験している他の人を見つけることができなかったので、私は明らかな何かを見逃しているに違いないと感じています. 一番近いのはここです。
デバッグ出力 (bjam -d 3) から判断すると、ほとんどのヘッダー ファイルも複数回スキャンされます...これが依存関係として複数回追加されることを意味するかどうかはわかりませんが、確かにファイルとコンテンツ全体のスキャンを合計する必要がありますか?
ヘッダー ファイルが変更されないことを保証できる特定のディレクトリまたは一連のディレクトリをわざわざスキャンしないように指示できれば、それは完璧です。
boost-build - bjam を使用した基本的な Boost アプリケーションの構築
Boost.Build に関する汎用ドキュメントは山ほどありますが、驚くべきことに、これを使用して単純な Boost アプリケーションを構築する方法については何も書かれていません。
bjam を使用して mingw の Boost をコンパイルし、すべてのライブラリを取得して C:\Boost にインクルードしました。これらすべてを使用すると、基本的な Jamroot ファイルはどのようになるでしょうか?
ライブラリにはすべて「libboost_filesystem-mgw34-mt-s.lib」のような複雑な名前が付けられています。「libboost_filesystem に対してリンクする」というだけの魔法のスイッチがどこかにあるはずです。
boost-build - gentoo でのビルド site-config.jam のブースト
プロジェクトでブースト ビルドを使用していますが、ブースト date_time を使用したいと考えています。私はグーグルで調べたところ、(おそらく)このように使用する必要があることがわかりました:
しかし、私はこのメッセージを受け取ります:
(-lboost_date_time
手動でgccフラグとして使用すると、正しく機能します)ライブラリolyをsite-config.jamに追加する必要があると思ったので、これを追加してみました:
しかし、それは効果がありません。
私は何を間違っていますか?
タクス
編集:うまくいくソリューションを探しているわけではありません。boost.build と boost ライブラリを正しくインストールすれば、誰にとっても機能するものが必要です。
c++ - Boost.Build プロジェクトごとの条件付きライブラリ コンパイル
Boost.Build を使用してビルドされた C++ プロジェクトがあります。プロジェクトは 3 つのサブプロジェクトで構成されています。
Jamroot.jam:
各プロジェクトには、次のテンプレートに従って Jamfile.jam があります。
config.cpp
は定義CONFIG_DEFINE_1
とCONFIG_DEFINE_2
条件付きコンパイルを使用するため (実際には単に定数です)、config
プロジェクトごとに個別のバージョンのライブラリがあります。
問題は、このようなアプローチconfig
では、ファイルが変更されたかどうかに関係なく、プロジェクト全体がビルドされるたびにライブラリが再ビルドされることです。つまり、最初にすべてをコンパイルしてリンクしてビルドし、2 回目には何も変更せずにビルドします。config
それぞれのライブラリのみがビルドされますproject_N
。冗長なコンパイルが発生しないように、建物を適切にセットアップするにはどうすればよいですか?
boost - bjam を使用した簡単なインストール
私はboost.build初心者ですが、bjamはほとんどのコンパイルタスクで非常に使いやすいですが、システムにアプリケーションをインストールするという、本当に簡単なはずのことを行う方法がわかりませんでした。
ツリーに 2 つのファイル (Jamroot 以外) を持つ非常に単純なプロジェクトがあるとします。
hello.cpp : /etc/hello.conf の内容を出力すると言う C++ プログラム
hello.conf : デフォルトの hello.conf
私がやりたいことは次のとおりです。
- システム全体に何もインストールせずに、hello.cpp をコンパイルしてリンクできるようにする
- インストール ターゲットで呼び出された場合 (その場合のみ):
- 実行可能な hello を /usr/bin にコピーします
- hello.conf を /etc にコピーします。
以下は、私が書き始めた bjam です。
私の問題は、ユーザーとして /etc にも /usr/bin にも書き込めないことです。bjam を入力するたびにではなく、明示的にインストール ターゲットを呼び出すときにのみこれを実行したいのです。
構築段階はユーザー権限を使用して実行し、インストール段階は管理者権限を使用して実行する必要があるため、インストール段階と構築段階を分離することは非常に重要です。
boost - C++ boost ライブラリのインストール時に bjam が使用するコマンドを変更する
ブースト ライブラリのインストールを少し遅くしようとしています。短時間に gcc の呼び出しが多すぎて、CPU 温度が限界まで上昇し、システムがクラッシュするためです。
これを /etc/site-config.jam に追加します
ただし、次のエラーが発生します。
$ ./bjam install
/etc/site-config.jam:5: キーワードの構文エラー。
/etc/site-config.jam:5: ロード
ルールでスリープ 10; モジュール pch で g++ が不明です。
/tmp/boost_1_40_0/tools/build/v2/kernel/modules.jam:283: インポート
中 /tmp/boost_1_40_0/tools/build/v2/tools/gcc.jam:19: ロード中
/tmp/boost_1_40_0/tools/build /v2/kernel/modules.jam:283: インポート
/tmp/boost_1_40_0/tools/build/v2/build/toolset.jam:37: toolset.using
/tmp/boost_1_40_0/tools/build/v2/build/project内.jam:874:
project-config を使用中.jam:12: modules.load
/tmp/boost_1_40_0/tools/build/v2/build-system.jam:241 内: load-config
/tmp/boost_1_40_0/tools/build 内/v2/build-system.jam:407: ロード構成ファイル内
/tmp/boost_1_40_0/tools/build/v2/build-system.jam:538: ロード
中 /tmp/boost_1_40_0/tools/build/v2/kernel/modules.jam:283: インポート中
/tmp/boost_1_40_0/tools/build /v2/kernel/bootstrap.jam:138: ブーストビルド
内 /tmp/boost_1_40_0/boost-build.jam:16: モジュールスコープ内
どうすればこれを解決できますか?