1

コンパイルするためにBoostが必要なアプリケーションがあるとしましょう。Boostは外部ライブラリであり、定期的に更新され、アプリケーションには複数のバイナリと複数のバージョンがあります(「Letthem grow and multiply」のように「複数」...質問しないでください...)、簡単に更新する必要があります/各アプリのバージョンリンクが適切なBoostバージョンになるように間接参照を維持します。

例えば:

  • MyApp8.0=>ブースト1.34
  • MyApp8.1=>ブースト1.35
  • MyApp9.0=>ブースト1.35
  • MyApp10.0=>ブースト1.37

Linuxファイルシステムでは、適切なブーストディレクトリにリダイレクトするシンボリックリンクを作成します。

  • MyApp 8.0 => MyAppBoostLink_8.0 => Boost 1.34
  • MyApp 8.1 =>MyAppBoostLink_8.1=>ブースト1.35
  • MyApp 9.0 =>MyAppBoostLink_9.0=>ブースト1.35
  • MyApp 10.0 =>MyAppBoostLink_10.0=>ブースト1.37

これにより、シンボリックリンクを置き換えるだけで、MyApp10.0をBoost1.38とリンクするように簡単に更新できます。

しかし、Windowsでは、これは機能しません(または私が何かを逃した)。

Boost自体はその考えをあきらめているようです。BJamでは、シンボリックリンクがWinNTで機能しなかったため、BJamがlibファイルをコピーしているという警告が表示されたことを思い出します。Visual C ++を使用しているため、別の方法を試しましたが、この問題を解決するプラグマはありません(ヘッダーインクルードとライブラリリンクのデフォルトの検索ディレクトリを追加するプラグマを検索しましたが、見つかりませんでした)。

スクリプトを起動してVCPROJファイル(Visual C ++ XML makefile)をチェックアウトし、Boostインクルードを更新してから変更をチェックインする必要があるとは信じられませんが、Windowsがシンボリックリンクを機能させる(またはそれらを作成する方法を発見する)。

より良いアイデアはありますか?

編集

コンパイラをVisualC++2003からVisualC++ 2008に更新すると、問題は解消されました。どうやら、Visual C++2008ではネットワーク間のシンボリックリンクが表示されます。

4

2 に答える 2

3

NTFS ファイルシステムに相当する Windows シンボリック リンクはジャンクションと呼ばれます: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx

于 2009-01-26T12:49:07.620 に答える
2

ブースト インストールのベース ディレクトリを、VS2008 の「スターター バッチ ファイル」に設定されるバージョン固有の環境変数に保持できます。これはおそらく、ビルド プロセスの一部として .vcproj ファイルを操作しなければならないほど醜いものではありません。おそらく...

于 2009-01-26T12:56:06.793 に答える